【问题标题】:How to add header in IHttpActionResult in Web API 2?如何在 Web API 2 的 IHttpActionResult 中添加标头?
【发布时间】:2017-07-25 06:03:32
【问题描述】:

您好,我正在使用 Web API 2 开发 API。我知道在使用 HttpResponseMessage 时如何添加标头。现在我使用IHttpActionResult

下面是我的示例当前代码。

return Content(HttpStatusCode.OK, LoginResponse);

在返回内容时如何添加标题?

每当我使用HttpResponseMessage 时,我都会有请求对象,我可以添加标头。

下面的代码我在HttpResponseMessage试过。

response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response.Headers.AddCookies(new[] { cookie });
return response;

在这种情况下,我可以在哪里添加标头值?

【问题讨论】:

    标签: c# .net asp.net-web-api asp.net-web-api2


    【解决方案1】:

    您可以继续使用您习惯的HttpResponseMessage 并更新标题。之后可以使用IHttpActionResult ResponseMessage(HttpResponseMessage)方法转换为IHttpActionResult

    简单示例

    public class MyApiController : ApiController {
    
        public IHttpActionResult MyExampleAction() {
            var LoginResponse = new object();//Replace with your model
            var cookie = new CookieHeaderValue("name", "value");//Replace with your cookie
    
            //Create response as usual
            var response = Request.CreateResponse(System.Net.HttpStatusCode.OK, LoginResponse);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            response.Headers.AddCookies(new[] { cookie });
            //Use ResponseMessage to convert it to IHttpActionResult
            return ResponseMessage(response);
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以创建一个自定义的IHttpActionResult,它装饰一个真实的但公开了一种操纵响应的方法:

      public class CustomResult : IHttpActionResult
      {
          private readonly IHttpActionResult _decorated;
          private readonly Action<HttpResponseMessage> _response;
      
          public CustomResult(IHttpActionResult decorated, Action<HttpResponseMessage> response)
          {
              _decorated = decorated;
              _response = response;
          }
      
          public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
          {
              var response = await _decorated.ExecuteAsync(cancellationToken);
      
              _response(response);
      
              return response;
          }
      }
      

      然后在你的行动中使用它:

      return new CustomResult(Content(HttpStatusCode.OK, loginResponse), res => res.Headers.AddCookies(new []{ cookie}));
      

      【讨论】:

      【解决方案3】:

      您可以使用以下代码添加标题:

      HttpContext.Current.Response.AppendHeader("Some-Header", value);
      

      或者这个

      response.Headers.Add("Some-Header", value);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        • 2018-06-26
        • 2019-05-02
        • 2014-04-23
        • 2018-04-25
        • 1970-01-01
        • 2019-12-20
        相关资源
        最近更新 更多