2017-07-25 75 views
2

嗨,我正在开发API的使用Web API 2.我知道如何使用HttpResponseMessage添加标题。现在我正在使用IHttpActionResult如何在Web API 2的IHttpActionResult中添加头文件?

下面是我的样本当前代码。

return Content(HttpStatusCode.OK, LoginResponse); 

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

每当我使用HttpResponseMessage我将有请求对象,我可以添加标题。

下面的代码我试过在HttpResponseMessage

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

在这种情况下,我可以添加标题值?

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

或本

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

回答

1

您可以创建自定义IHttpActionResult其装饰一个真实的,但公开的方式处理响应:

+0

谢谢PECO。它正在工作。我还没有理解你在上面的代码中做了什么!我可以知道上面解释的是什么吗?谢谢! –

+0

下面是代表的简短说明:https://www.codementor.io/aydinadn/delegates-func-act-in-c-sharp-du107s5mj这里是一个装饰模式的例子:https:// assist- software.net/blog/implementation-decorator-pattern-c希望它有帮助! – peco

1

您可以通过使用此代码添加页眉

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})); 
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); 
    } 
} 
相关问题