[英]Creating cookie when using odata and web api 2
如何在使用Web api 2和odata時設置cookie。 我是這個api的新手,傳統上我使用了context.Response但它似乎在這里似乎沒有用。
這是我的控制器代碼的一部分:
public async Task<IHttpActionResult> Post(Order Order)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
context.Orders.Add(Order);
await context.SaveChangesAsync();
return Created(Order);
}
如果您正在使用IHttpActionResult
類,則其中有一個函數Task<System.Net.Http.HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
您可以使用該函數返回HttpResponseMessage
並將cookie添加到響應消息中。
我會創建另一個實現類似於IHttpActionResult
類:
public class OrderResult : IHttpActionResult
{
Order _order;
HttpRequestMessage _request;
public OrderResult(Order order, HttpRequestMessage request)
{
_order = value;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
var cookie = new CookieHeaderValue("session-id", "6789");
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
response.Headers.AddCookies(new CookieHeaderValue[] { cookie });
return Task.FromResult(response);
}
}
您需要調整控制器代碼以調用此新類。 例如
public async Task<IHttpActionResult> Post(Order Order)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
context.Orders.Add(Order);
await context.SaveChangesAsync();
return new OrderResult(Order, request /* not sure how you'll get the request in this scope*/);
}
您可以編寫自己的DelegatingHandler,將所需的cookie添加到響應中。
檢查“示例:在消息處理程序中設置和檢索Cookie”部分:
http://www.asp.net/web-api/overview/working-with-http/http-cookies
有關如何插入消息處理程序,請檢查:“按路由消息處理程序”
http://www.asp.net/web-api/overview/working-with-http/http-message-handlers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.