c# - 将工作邮递员请求转换为 C# (HttpClient)
问题描述
很难将成功的 Postman 请求转换为 C# 中的成功请求。使用 HttpClient 显示我的代码,但也尝试使用 PostSharp 和 HttpRequest。我正在使用具有密码的本地 pfx 证书文件。
在邮递员中:
• Added the PFX cert to Client Certificates
• Authorization tab has username and password (Basic Auth)
• Authorization header automatically generates based on above ("Basic <encoded username/password>")
• Body is "{}"
发送成功 (200)。
使用 HttpClient:
var host = @"https://thehost/service/verb?param1=blah¶m2=1111111";
const string certName = @"C:\Key.pfx";
const string userName = "userName";
const string certPassword = "password1";
const string authPassword = "password2";
var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
//tried many combinations here
handler.SslProtocols = SslProtocols.Tls| SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;
var cert = new X509Certificate2(certName, certPassword);
handler.ClientCertificates.Add(cert);
//not sure if this is needed
handler.ServerCertificateCustomValidationCallback += (message, certificate2, arg3, arg4) => true;
var client = new HttpClient(handler);
//not sure if these are needed
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.ConnectionClose = true;
//added this to both the request and the client. Also tried "*/*" for both
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var request = new HttpRequestMessage();
request.RequestUri = new Uri(host);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Content = new StringContent("{}", Encoding.UTF8, "application/json");
request.Method = HttpMethod.Post;
//basic auth header
var authenticationString = $"{userName}:{authPassword}";
var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.UTF8.GetBytes(authenticationString));
var authHeader = new AuthenticationHeaderValue("Basic", base64EncodedAuthenticationString);
request.Headers.Authorization = authHeader;
try
{
var httpResponseMessage = client.SendAsync(request).ConfigureAwait(false).GetAwaiter().GetResult();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
这将返回未经授权 (401)。响应文本包含“无效的用户名或密码”。
关于两个请求之间可能不匹配的任何想法?
解决方案
您是否尝试过使用 Postman 代码片段自动生成代码?它使用 C# 的 RESTSharp REST API 客户端库。
单击 </> 图标并选择“C# - RestSharp”,它应该会为您提供代码。
https://learning.postman.com/docs/sending-requests/generate-code-snippets/
推荐阅读
- javascript - 基于无线电选择的显示字段
- angular - 如何从 Ionic/Angular 向 XMLRPC 服务器发出 HTTP 请求
- c# - Asp.net core 3.1 中的路由
- c# - 对于新的 .net 核心应用程序,我应该在 protobuf-net 和 google.protobuf 之间使用什么 NuGet 包?
- javascript - 在 woocommerce 中显示新添加项目的钩子在哪里?
- php - 为用户实体设置默认角色
- sql-server - 协助编写多级、多对多连接,同时只允许从第一级重复
- woocommerce - 根据客户 ID Woocommerce 删除税款
- unity3d - 在 unity3d 中使用刚体的最佳导航代码?
- php - 无法在后端 Slim 4 中访问 formData