【问题标题】:Web API - How to set cookie with authen requestWeb API - 如何使用身份验证请求设置 cookie
【发布时间】:2013-11-21 02:38:26
【问题描述】:

我已经用 asp.net web api 构建了一个小例子。我创建了一个用于身份验证的 api。当用户成功登录时,我尝试使用 set-cookie 响应标头。但是在下一个请求中,我在标头中找不到 cookie。有谁能够帮我?非常感谢!!!

        if (repository.CheckValidUser(user))
        {
            var resp = new HttpResponseMessage();

            var cookie = new CookieHeaderValue("Authorization-Token", RSAClass.Encrypt(user.Username));
            cookie.Expires = DateTimeOffset.Now.AddDays(1);
            cookie.Domain = Request.RequestUri.Host;
            cookie.Path = "/";

            resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
            return resp;
        }
        else
        {
            throw new HttpResponseException(new HttpResponseMessage() { StatusCode = HttpStatusCode.Unauthorized, Content = new StringContent("Invalid user name or password.") });
        }

我有一些关于我的请求的照片

【问题讨论】:

    标签: asp.net cookies


    【解决方案1】:

    您应该创建一个 DelegatingHanlder 来保存 cookie,例如:

    public class MyCookieHandle : DelegatingHandler
    {
        async protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, CancellationToken cancellationToken)
        {
            //
            //  Other code for retrieve user information
            //
            var cookie = request.Headers.GetCookies("Authorization-Token").FirstOrDefault();
    
            if (cookie == null)
            {
                cookie = new CookieHeaderValue("Authorization-Token", RSAClass.Encrypt(user.Username));
                cookie.Expires = DateTimeOffset.Now.AddDays(1);
                cookie.Domain = request.RequestUri.Host;
                cookie.Path = "/";
            }
    
            HttpResponseMessage resp = await base.SendAsync(request, cancellationToken);
            resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
    
            return resp;
        }
    }
    

    这里有更多信息:HTTP Cookies in ASP.NET Web API

    【讨论】:

    • 哇,我会试试的。太感谢了。我为这个问题浪费了 2 个小时。谢谢。
    • 但为什么我不能在控制器中使用 set-cookie 标头?你能为我解释一下吗?谢谢!
    • 你可以,但你必须坚持每个请求的cookie,否则它会丢失,因为你正在处理直接处理HTTP请求/响应的Wep API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2022-11-18
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多