我有一个 Web.Api 服务,它有一个接受自定义类并返回另一个自定义类的方法:
public class TestController : ApiController
{
public CustomResponse Post([FromBody]CustomRequest request)
{
// process request
...
// create response
CustomResponse resp = new CustomResponse() { ... };
return resp;
}
}
现在我还想发回一个 cookie 作为 Http 响应的一部分。我该怎么做?
最佳答案
我设法通过结合来自几个不同位置的信息来做到这一点。首先,为了能够轻松地在响应中发送 cookie,Web.Api Controller 应该返回一个 System.Net.Http.HttpResponseMessage
的实例。类(link):
public class TestController : ApiController
{
public HttpResponseMessage Post([FromBody]CustomRequest request)
{
var resp = new HttpResponseMessage();
...
//create and set cookie in response
var cookie = new CookieHeaderValue("customCookie", "cookieVal");
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
return resp;
}
}
但是我如何确保我也可以轻松地发回 CustomResponse
?
诀窍在于 answer对此question .使用 Request.CreateResponse<T>
请求对象上的方法。整个交易就变成了:
public class TestController : ApiController
{
public HttpResponseMessage Post([FromBody]CustomRequest request)
{
// process request
...
var resp = Request.CreateResponse<CustomResponse>(
HttpStatusCode.OK,
new CustomResponse() { ... }
);
//create and set cookie in response
var cookie = new CookieHeaderValue("customCookie", "cookieVal");
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
return resp;
}
}
关于c# - 如何从 Web.Api Controller 方法发送 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16854376/