我有以下代码:
CookieHeaderValue cookie = Request.Headers.GetCookies("session").FirstOrDefault();
var isAuthenticated = _userService.IsAuthenticated(cookie);
if (!isAuthenticated)
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "");
我希望在调用api的任何部分后立即执行此代码。我没有找到任何好的解决方案或方法,所以我想我会在这里问。
(我现在做的是在每个get / post / put / delete中执行代码,这很糟糕)。
答案 0 :(得分:1)
解决此问题的最佳位置是授权过滤器属性。请参阅Authentication Filters in ASP.NET Web API 2。
主题过于宽泛,不能完整重复,但归结为创建属性:
public class CookieAuthenticationFilterAttribute : Attribute, IAuthenticationFilter
{
public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
// your cookie code
}
}
并将其应用于控制器或操作方法:
[YourCookieAuthentication]
但请务必阅读链接。
答案 1 :(得分:0)
您可以使用ActionFilter或AuthorizationFilter来实现此目的。这些是可以在特定控制器/操作上或全局使用的属性类。因此,您不需要为每个操作重复代码。
有关详细信息,请参阅此link。它显示了ASP.NET Web API中的常规身份验证/授权流以及如何自定义它。
答案 2 :(得分:0)
所以我发现我的问题的最佳解决方案是以下代码:
public class CookieFilterAttribute : AuthorizeAttribute
{
[Inject]
public IUserService UserService { get; set; }
protected override bool IsAuthorized(HttpActionContext actionContext)
{
CookieHeaderValue cookie = actionContext.Request.Headers.GetCookies("session").FirstOrDefault();
var isAuthenticated = UserService.IsAuthenticated(cookie);
return isAuthenticated;
}
}