2

我使用此代碼創建了一些聲明,我在登錄應用程序時獲取了值。我想在我的一些API控制器中使用「Id」的聲明值,如何在Asp.net Web Api 2中獲取自定義聲明值 - Owin - ApiController。

var identity = new ClaimsIdentity(context.Options.AuthenticationType); 

var props = new AuthenticationProperties(new Dictionary<string, string> 
{ 
    { "UserName", customer.FirstName }, { "Id", customer.Id.ToString() } 
}); 

var ticket = new AuthenticationTicket(identity,props); context.Validated(ticket);

所以在控制器我有這樣的代碼:

[Authorize] 
[Route("api/banners/{customerId")] 
[HttpGet] 
public HttpResponseMessage GetBanners(int customerId) 
{ 
    return Request.CreateResponse<IEnumerable<Banner>>(HttpStatusCode.OK, AppDataAccess.GetBanners(customerId))); 
} 

而且我想更改代碼以這一個:

[Authorize] 
[Route("api/banners")] 
[HttpGet] 
public HttpResponseMessage GetBanners() 
{ 
    int CustomerId = SOME FUNCTION THAT GETS THE CLAIM VALUE I WANT (ID) 

    return Request.CreateResponse<IEnumerable<Banner>>(HttpStatusCode.OK, AppDataAccess.GetBanners(customerId))); 
} 

我一直在研究,但我只是找到了AuthorizationFilterAttribute但它只是在路線上使用它,有沒有什麼方法可以讓你知道我可以建立這個功能,所以我只是在控制器中調用它?

我使用Microsoft.AspNet.Identity.Owin 2.0.0

感謝您的幫助

回答

5

保存您的自定義聲明是這樣的:

var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName)); 
identity.AddClaim(new Claim("Id", user.Id.ToString())); 

並獲得這樣的:

((ClaimsIdentity)User.Identity).Claims.FirstOrDefault(x => x.Type == "Id").Value 
相關問題