访问 API 个控制器时执行代码
Executing code when accessing API controllers
我有以下代码:
CookieHeaderValue cookie = Request.Headers.GetCookies("session").FirstOrDefault();
var isAuthenticated = _userService.IsAuthenticated(cookie);
if (!isAuthenticated)
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "");
我希望此代码在我的 api 的任何部分被调用时立即执行。我还没有找到任何好的解决方案或方法来做到这一点,所以我想我会在这里问。
(我现在做的是在每个 get/post/put/delete 中执行代码,这太可怕了)。
您可以为此目的使用 ActionFilter 或 AuthorizationFilter。这些是您可以在特定 controllers/actions 上或全局使用的属性 类。所以你不需要为每个动作重复代码。
有关详细信息,请参阅此 link。它显示了 ASP.NET Web API 中的一般 authentication/authorization 流程以及如何对其进行自定义。
解决此问题的最佳方法是授权过滤器属性。参见 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]
但请务必阅读link。
所以我发现我的问题的最佳解决方案是以下代码:
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;
}
}
我有以下代码:
CookieHeaderValue cookie = Request.Headers.GetCookies("session").FirstOrDefault();
var isAuthenticated = _userService.IsAuthenticated(cookie);
if (!isAuthenticated)
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "");
我希望此代码在我的 api 的任何部分被调用时立即执行。我还没有找到任何好的解决方案或方法来做到这一点,所以我想我会在这里问。
(我现在做的是在每个 get/post/put/delete 中执行代码,这太可怕了)。
您可以为此目的使用 ActionFilter 或 AuthorizationFilter。这些是您可以在特定 controllers/actions 上或全局使用的属性 类。所以你不需要为每个动作重复代码。
有关详细信息,请参阅此 link。它显示了 ASP.NET Web API 中的一般 authentication/authorization 流程以及如何对其进行自定义。
解决此问题的最佳方法是授权过滤器属性。参见 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]
但请务必阅读link。
所以我发现我的问题的最佳解决方案是以下代码:
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;
}
}