我需要在不添加Authorize属性的情况下向特定路由添加授权。我有什么办法可以在启动时做到这一点吗?我知道我可以在所有路由中全局添加Authorize属性,但是我只需要向控制器中的特定方法添加authorize,而无需触摸该控制器中的任何代码。
答案 0 :(得分:3)
如果您无法触摸代码,我将看到唯一的解决方案-使用中间件进行检查。假设您要限制访问的路由是POST'/ users / register',因此您可以在启动时使用全局注册的ActionFilter来检查url,如果它的url是'/ users / register',则尝试检查令牌和如果令牌无效,则返回401。
还可以使用Owin中间件
这是使用ActionFilter实现这种逻辑的简单示例
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configuration.Filters.Add(new CheckAuthorizationFilterAttribute());
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
public class CheckAuthorizationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var requestUri = actionContext.Request.RequestUri.AbsolutePath;
if (requestUri == "/api/users/register")
{
var isTokenValid = ValidateToken();
if (!isTokenValid)
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
}
public bool ValidateToken() => false;
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
}
}