我已经编写了一个自定义授权过滤器,用于 AngularJS XSRF 方法,但是过滤器没有被调用。
奇怪的是我从另一个项目中复制了它,它似乎在那里工作正常。
这是属性/过滤器代码。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class ValidateAngularAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
string token = filterContext.RequestContext.HttpContext.Request.Headers["X-XSRF-TOKEN"];
object sessionToken = filterContext.RequestContext.HttpContext.Session["XSRF-TOKEN"];
if (string.IsNullOrEmpty(token) || sessionToken == null || sessionToken.ToString() != token)
{
throw new UnauthorizedAccessException();
}
}
}
在这里,它装饰了 WebAPI 控制器中的一个动作。
[Authorize]
public class WorksOrdersController : ApiController
{
[HttpPost]
[ValidateAngularAntiForgeryToken]
public void EmailJob(int id, EmailModel model)
{
// do something
}
}
我是否必须向 Web.config 添加一些内容才能使其正常工作?我在实际运行的项目的 web.config 中看不到任何显着不同的东西。