簡體   English   中英

使用odata和web api時創建cookie 2

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM