gpt4 book ai didi

c# - 使用 cookie 的 HttpClient (Windows.Web.Http)

转载 作者:行者123 更新时间:2023-11-30 14:52:41 25 4
gpt4 key购买 nike

我正在开发一个 Windows 应用程序,但我遇到了一些 cookie 问题。请注意,我使用的是 Windows.Web.Http,而不是系统命名空间 HttpClient。

我正在使用的 API 使用 auth-header 进行身份验证。基本上在 POST 登录后,我需要一种方法来获取返回的 cookie,然后使用这些 cookie 来执行后续的 API 调用。我发布了一个我目前拥有的例子,它成功了。我可以在结果对象中看到 cookie。我只是不完全确定从这里去哪里/如何进行。谢谢!有任何想法吗?

using MyApi.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Web.Http;
using Newtonsoft.Json;
using MyApi.Models.Auth;
using MyApi.Models;

namespace MyApi
{
public class MyService
{
private const string MyBaseUrl = "http://api.my.com:3000";
private readonly HttpClient _httpClient = new HttpClient();

public async Task<SignInResponse> AttemptLogin(string username, string password)
{
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
throw new ArgumentException("Username or password is null or empty");

var uri = new Uri(string.Format("{0}/{1}", MyBaseUrl, "auth/signin"));

var authSignIn = new Models.Auth.SignInRequest();
authSignIn.Email = username;
authSignIn.Password = password;

var myObject = JsonConvert.SerializeObject(authSignIn);

// I see the headers in the result object, but I'm not
// sure the best way to a) get them out and b) shove them into
// all of the next calls
var result = await _httpClient.PostAsync(uri,
new HttpStringContent(myObject.ToString(),
Windows.Storage.Streams.UnicodeEncoding.Utf8,
"application/json"));

var content = await result.Content.ReadAsStringAsync();
var successResponse = new SignInResponse();

try
{
successResponse = JsonConvert.DeserializeObject<SignInResponse>(content);
}
catch (Exception)
{
var failResponse = JsonConvert.DeserializeObject<ErrorResponse>(content);
throw new Exception(failResponse.message);
}

return successResponse;
}
}
}

最佳答案

您可以使用HttpBaseProtocolFilter.CookieManager,例如:

var filter = new HttpBaseProtocolFilter();
var cookieManager = filter.CookieManager;

var uri = new Uri("http://api.my.com:3000");
foreach (var cookie in cookieManager.GetCookies(uri))
{
Debug.WriteLine(cookie.Name);
Debug.WriteLine(cookie.Value);
}

注意,如果 cookie 已经在 HttpCookieContainer 中,则 cookie 将在下一个请求中自动添加到 http://api.my.com:3000 ,您无需采取任何行动。

如果你想修改或删除它们,HttpCookieContainer有方法可以做到这一点。

关于c# - 使用 cookie 的 HttpClient (Windows.Web.Http),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31330189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com