Tôi đã thực hiện điều này bằng cách kết hợp thông tin từ một vài địa điểm khác nhau. Thứ nhất, để dễ dàng có thể gửi các tập tin cookie trong phản ứng, bộ điều khiển Web.Api nên trở về một thể hiện của lớp 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;
}
}
Nhưng sau đó làm thế nào để đảm bảo rằng tôi có thể dễ dàng CSONG gửi lại CustomResponse
?
Bí quyết nằm trong số answer đến số question này. Sử dụng phương thức Request.CreateResponse<T>
trên đối tượng yêu cầu. Toàn bộ thỏa thuận sau đó trở thành:
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;
}
}
Điều đó có vẻ đúng. Nếu bạn đang làm điều này trong rất nhiều phương pháp hành động, bạn có thể đặt nó vào một bộ lọc hành động. –
Tôi đã được tất cả "wow này tuyệt vời này api web" cho đến khi tôi thấy điều này. Thật đáng tiếc, bạn không thể chỉ cần thêm một cookie mà không phải trả lại một HttpResponseMessage. Tôi nghĩ ý tưởng là làm cho Web API dễ dàng hơn WCF. Tôi sợ tôi không thấy điều đó. Làm thế nào một bộ lọc hành động có thể trợ giúp ở đây mà không cần thêm độ phức tạp hơn cho một yêu cầu đơn giản như vậy. Đừng hiểu. – ianbeks
Xin lỗi nếu tôi có thể hỏi, tôi hơi bối rối. Tôi có cần lấy cookie phản hồi trong ứng dụng khách và đặt nó hay trình duyệt nhận tiêu đề phản hồi cookie đã đặt tự động thực hiện việc này không? –