c# - 如何从 Web.Api Controller 方法发送 cookie

标签 c# cookies asp.net-web-api

我有一个 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/

相关文章:

python - python中使用cookielib模拟浏览器获取url

javascript - 将 cookie 作为 node.js 请求的一部分传递

c# - HttpContent.ReadAsAsync 反序列化问题

c# - 为外部身份验证创建部分登录 cookie

c# - 基于属性的项目之间的反射(reflection)

javascript - 如何在AngularJS或Javascript中实现类似C#的await的功能?

c# - 以下代码是否可重入且线程安全?

HTML & CSS : Hiding the cookie bar after clicking on "I accept"

c# - 查询 Entity Framework ,包括尚未提交的记录

asp.net-web-api - 是否有可能单独使用 allow anonymous 属性并删除 swagger 授权?