【问题标题】:Manually adding attribute to request body after authentication身份验证后手动将属性添加到请求正文
【发布时间】:2014-05-07 23:23:37
【问题描述】:

我正在开发一个 ASP.NET Web API 2 应用程序。当包含用户身份验证凭据的 HTTP 请求进入时,在它到达定义的路由(我正在使用属性路由)之前,我想以某种方式添加一个过滤器,以便它可以对用户进行身份验证,并在成功身份验证后,我想从存储库中获取一个 ID 并将其添加到请求正文中。

是否可以在请求到达控制器的操作之前添加过滤器?更重要的是,过滤器认证后是否可以给请求体增加一些值?

谢谢。

【问题讨论】:

    标签: asp.net http rest asp.net-web-api asp.net-web-api2


    【解决方案1】:

    因为我无法评论,所以我在这里添加它。

    本文提供了几个关于如何在 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());
    

    【讨论】:

    • 这有帮助。谢谢。但我更感兴趣的是,在我们将其传递给控制器​​之前,是否可以在过滤后将某些内容添加到“请求”中。
    • 只要你把它放在最后,不会是这样吗?像 [Authorize] [MyCustomFilter]。自定义过滤器将在所有其他过滤器之后运行。
    • 我不知道这是否有帮助,但这里有一些关于它们的执行顺序:msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    我认为修改客户端在请求正文和标头中发送的内容绝不是一个好主意。我相信您可以在Request 对象上使用Proeperties 属性。整个管道都可以访问它。

    Request.Properties.Add("UserId", "2");
    

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      相关资源
      最近更新 更多