Nir*_*ole 5 .net c# asp.net-web-api asp.net-web-api2
嗨,我正在使用 Web API 2 开发 API。我知道如何在使用HttpResponseMessage. 现在我正在使用IHttpActionResult.
下面是我的示例当前代码。
return Content(HttpStatusCode.OK, LoginResponse);
Run Code Online (Sandbox Code Playgroud)
返回内容时如何添加标题?
每当我使用时,HttpResponseMessage我都会有请求对象,并且可以添加标头。
下面的代码我在HttpResponseMessage.
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response.Headers.AddCookies(new[] { cookie });
return response;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以在哪里添加标题值?
您可以继续使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个自定义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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的操作中使用它:
return new CustomResult(Content(HttpStatusCode.OK, loginResponse), res => res.Headers.AddCookies(new []{ cookie}));
Run Code Online (Sandbox Code Playgroud)