【问题标题】:How add Cookies to http request header in ASP .NET Core MVC如何在 ASP .NET Core MVC 中将 Cookie 添加到 http 请求标头
【发布时间】:2020-08-24 08:29:40
【问题描述】:

我需要从https://token.docs.microsoft.com/accesstokens 获取令牌数组。这可以通过在 http 请求标头中包含 cookie 来完成。我已经用邮递员测试过了。它有效。

我有带有 ASP .Net 核心 Mvc 的 Web 应用程序。它将使用 Azure AD 进行身份验证。用户登录后,我需要发送一个包含“Cookie”请求标头的 API 请求。

static async Task<string> SendURI(Uri u, HttpContent c, string token)
        {
            var response = string.Empty;
            using (var client = new HttpClient())
            {

                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
                HttpRequestMessage request = new HttpRequestMessage
                {
                    Method = HttpMethod.Post,
                    RequestUri = u,
                    Content = c
                };

                HttpResponseMessage result = await client.SendAsync(request);
                if (result.IsSuccessStatusCode)
                {
                    response = result.StatusCode.ToString();
                }
            }
            return response;
        }

这就是我发送请求的方式。对于没有 cookie 请求标头的其他请求,它可以正常工作。但我需要知道如何从我的应用程序向这个 http 请求添加 cookie。 https://docs.microsoft.com/en-us/rest/api/resources/tenants/list#code-try-0 在这个文档中他们使用了这种方法。我的应用程序需要同样的努力。他们使用 cookie 标头向 https://token.docs.microsoft.com/accesstokens this 发送 post 请求。

screenshot of sample request

更新: 可以通过 post man 代码将 header cookie 添加到 http 请求。

现在我面临着创建自定义 cookie 的挑战,例如使用 ms doc。

cookie sample ss

如何在 startup.cs 文件中创建客户 cookie?对于内容值应该包括什么?

services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(20);
                options.Cookie.Name = ".TokenAuthCookies";
                options.Cookie.Path = "/";
                options.Cookie.Domain = ".docs.microsoft.com";
                options.Cookie.IsEssential = true;
                options.Cookie.SameSite = SameSiteMode.Unspecified;
            });

我如何相应地更改上面的代码来实现这一点?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core


    【解决方案1】:

    以下是使用 Postman 时的有趣生活小窍门:

    编辑:

    我不确定我是否理解这个问题。

    如果你有值,把它放在标题中

    request.AddHeader("Cookie",value)
    

    如果您想定义您的 .net Core 应用程序以允许使用会话 Cookie,您可以尝试转到 Startup.cs 并在 ConfigureServices 方法中添加:

    services.AddSession(options =>
                {
                    options.IdleTimeout = TimeSpan.FromSeconds(int.Parse(_configuration["Cookies:ExpiresInSecond"]));
                    options.Cookie.Name = _configuration["Cookies:CookiesName"];
                    options.Cookie.IsEssential = true;
                    options.Cookie.SameSite = SameSiteMode.Unspecified;
                });
    

    _configuration 取自 .NET Core 项目中的 appSettings.json 文件。

    编辑 2:

    如果您希望为会话 Cookie 设置值,请使用:

    _httpContext.HttpContext.Session.Set(KEY, Encoding.ASCII.GetBytes(VALUE));
    

    如果您希望从会话 Cookie 中获取值:

    _httpContext.HttpContext.Session.TryGetValue(KEY, out byte[] VALUE_BYTES);
    var value = VALUE_BYTES == null ? "" : Encoding.ASCII.GetString(VALUE_BYTES);
    

    如果您希望将刚刚从会话 Cookie 中提取的值添加到您的请求标头中,请使用:

    request.AddHeader("Cookie",value)
    

    希望涵盖一切:)

    【讨论】:

    • 感谢您的回答。这很酷。我没有意识到这一点。我可以知道如何将会话 cookie 值放入 request.AddHeader("Cookie","???")
    • 这是我第一次使用带有 cookie 标头的 api 请求。我将那个 cookie 配置添加到我的启动类中。最后一个问题我如何将 cookie 值传递给 request.AddHeader("Cookie",???).
    • 尝试先用配置运行它。我认为应该足够了如果你想在你的标题中添加一个特定的 Coockie,就像你写的那样:request.AddHeader("Coockie",[your value])
    • 谢谢 Yoni Ziv。我会试试这个
    • 知道如何从 startup.cs 获取令牌身份验证 cookie 吗?除了上面的 startup.cs 文件代码之外,我还需要做额外的步骤吗?我更新了问题。
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 2021-02-10
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多