我正在开发一个ASP.NET Web API 2应用程序。当一个HTTP请求进入其中包含用户身份验证凭据时,在它到达定义的路由(我正在使用属性路由)之前,我想以某种方式添加一个过滤器,以便它可以验证用户,并在成功验证,我想从存储库中获取一个ID并将其添加到请求正文中。
是否可以在请求到达控制器的操作之前添加过滤器?更重要的是,是否可以在过滤器进行身份验证后为请求正文添加一些值?
感谢。
答案 0 :(得分:2)
我无法评论我在这里添加它。
本文提供了有关如何在Asp.net Web Api中处理身份验证的几个选项: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
但是如果你坚持使用自定义过滤器方式,另一种选择可能是这样的:
Add custom header to all responses in Web API
在这里,他使用System.Web.Http.Filters为响应添加了自定义标头。
public class AddCustomHeaderFilter : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response.Content.Headers.Add("customHeader", "custom value goes here");
}
}
并且有理由加入过滤器:
config.Filters.Add(new AddCustomHeaderFilter());
答案 1 :(得分:1)
我认为修改客户端在Request主体和标头中发送的内容绝不是一个好主意。我相信您可以在Proeperties
对象上使用Request
属性。整个管道都可以访问它。
Request.Properties.Add("UserId", "2");