相关疑难解决方法(0)

使用HttpClient进行Https调用

我一直在HttpClient使用C#进行WebApi调用.似乎比较简洁快捷WebClient.但是我在Https打电话时被困住了.

如何制作以下代码才能Https拨打电话?

HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/xml"));

var task = httpClient.PostAsXmlAsync<DeviceRequest>(
                "api/SaveData", request);
Run Code Online (Sandbox Code Playgroud)

编辑1: 上面的代码适用于进行http调用.但是,当我将方案更改为https时,它不起作用.这是获得的错误:

底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.

编辑2: 将方案更改为https是:第一步.

如何提供证书和公钥/私钥以及C#请求.

c# asp.net-web-api

146
推荐指数
6
解决办法
23万
查看次数

绕过.net核心中的无效SSL证书

我正在开发一个需要连接到https站点的项目.每次连接时,我的代码都会抛出异常,因为该站点的证书来自不受信任的站点.有没有办法绕过证书检查.net核心http?

我在以前版本的.NET中看到了这段代码.我想我只需要这样的东西.

 ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
Run Code Online (Sandbox Code Playgroud)

c# ssl ssl-certificate asp.net-core

67
推荐指数
9
解决办法
5万
查看次数

尽管设置了ServerCertificateValidationCallback,但无法创建SSL/TLS安全通道

我正在尝试使用自签名证书建立与测试服务器的 SSL/TLS连接.通过不安全的渠道进行沟通没有问题.

这是我的示例代码,我是基于这个解决方案编写的: 使用HttpClient C 允许不受信任的SSL证书#忽略证书错误?.NET客户端连接到ssl Web API

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

var c = new HttpClient();
var r = c.GetAsync("https://10.3.0.1:8443/rest/v1").Result;
if (r.IsSuccessStatusCode)
{
    Log.AddMessage(r.Content.Get<string>());
}
else
{
    Log.AddMessage(string.Format("{0} ({1})", (int)r.StatusCode, r.ReasonPhrase));
}
Run Code Online (Sandbox Code Playgroud)

还试过这个:

var handler = new WebRequestHandler();
handler.ServerCertificateValidationCallback = delegate { return true; };
var c = new HttpClient(handler);
...
Run Code Online (Sandbox Code Playgroud)

还有这个

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Run Code Online (Sandbox Code Playgroud)

但每次我都有例外:

InnerException: System.Net.Http.HttpRequestException
   _HResult=-2146233088
   _message=An error occurred while sending the request. …
Run Code Online (Sandbox Code Playgroud)

c# ssl https

64
推荐指数
5
解决办法
10万
查看次数

忽略Xamarin.Forms(PCL)中的SSL证书错误

有没有办法做这里描述的事情:https://stackoverflow.com/a/2675183但在Xamarin.Forms PCL应用程序?我正在使用HttpClient连接到服务器.

ssl xamarin.forms

23
推荐指数
3
解决办法
2万
查看次数

.NET客户端连接到ssl Web API

我有一个ASP.NET Web API,我想与ssl一起使用.目前,服务器正在使用自签名证书,此时允许使用http和https.我有一个非常基本的测试客户端,它适用于http,但不适用于https.我想知道如何修改下面的客户端代码,以便它可以与https一起使用.目前IE,Firefox和Chrome都可以使用http和https(带有证书警告)连接到Web API,因此这让我相信我不应该只修改服务器上的任何内容,只需在客户端代码中.这是客户端代码:

static void Main(string[] args)
{
    try
    {
        if (args.Length != 1)
        {
            Console.WriteLine("Please provide a url, and only a url.");
            return;
        }

        var url = new Uri(args[0]);
        var urlAuthority = url.GetLeftPart(UriPartial.Authority);
        var urlPathQuery = args[0].Substring(urlAuthority.Length);
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(urlAuthority);
        HttpResponseMessage response = client.GetAsync(urlPathQuery).Result;
        if (response.IsSuccessStatusCode)
            Console.WriteLine(response.Content.ReadAsAsync<string>().Result); // expecting scalar results only
        else
            Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
    }
    catch (Exception ex)
    {
        Exception tempEx = ex;
        while (tempEx != null)
        {
            Console.WriteLine(tempEx.Message); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

22
推荐指数
3
解决办法
5万
查看次数

我们如何在 ASP.Net Core 中使用 HttpClient?

我正在编写 ASP.Net MVC Core 2.2 Web App。我需要使用 HTTP 或 HTTPS 从另一个 Web 服务器获取数据。我该怎么做?

我使用HttpClient.

我有一个接收消息的控制器,它工作正常,但是,我应该构建HttpClient吗?

[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
    private readonly IHostingEnvironment _env;
    private readonly ILogger _logger;
    private readonly IUpdateService _updateService;

    public MyController(
        IHostingEnvironment env,
        ILogger<MyController> logger,
        IUpdateService updateService)
    {
        _env = env;
        _logger = logger;
        _updateService = updateService;
    }

    // POST api/values
    [HttpPost]
    public async Task<IAsyncResult> Post([FromBody]Update update)
    {
        using (HttpClient Client = new HttpClient())
        {
            HttpResponseMessage result = Client.GetAsync(uri).Result;
            switch …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-2.0

11
推荐指数
1
解决办法
2万
查看次数

AuthenticationException:由于证书链中的错误,远程证书无效:UntrustedRoot、NotValidTime

在 Visual Studio 中进行本地开发和身份验证时,我始终收到以下错误:

AuthenticationException:由于证书链中的错误,远程证书无效:NotValidTime、UntrustedRoot

其中,当使用从我们的项目之一HttpClient调用我们的后端端点之一( )时会发生这种情况,因此这一切都发生在本地。localhost

该证书从去年的这个日期开始签署/有效,一年后现已失效。我团队中的其他开发人员都没有收到它或遇到相同的问题。

然后我尝试了很多东西,其中包括:

我们没有集中的身份验证程序 - 它分布在系统的各个地方和场景中,因此我无法使用像if #DEBUG... //then ignore certificates. 我需要正确生成有效的证书。

c# ssl-certificate visual-studio asp.net-web-api

11
推荐指数
2
解决办法
4万
查看次数

"使用HttpClient根据验证程序,远程证书无效"

无法通过证书验证解决问题.

有Web API服务器,它使用HTTPS来处理请求.服务器的证书具有以下认证路径:RCA(root) - > ICA(中间) - > Web API服务器.RCA,ICA和Web API服务器是同一Active Directory域的成员.

客户端应用程序(桌面,计算机加入同一域)用于HttpClient与服务器通信并支持两种方案:

  • 连接到企业网络;
  • 与公司网络断开连接(Internet访问).

两种方案都使用基本身份验
RCA和ICA证书分别放在"受信任的根证书颁发机构"和"中间证书颁发机构"中,用于本地计算机帐户.RCA证书是自签名的.

现在,当客户端连接到公司网络时,证书验证按预期工作,用户可以与Web API"对话".

当客户端断开连接(只有Internet连接可用)时,证书验证失败AuthenticationException("远程证书根据验证过程无效").

我不想完全关闭证书验证,但只需要告诉验证系统,这个特定证书是有效的.此外,客户端应用程序使用SignalR,它默认使用它自己的传输.因此,这和这不是选项.

为什么将RCA ICA证书放到"Trusted ..."和"Intermediate ..."文件夹中没有帮助?

有没有解决方法?

c# ssl-certificate dotnet-httpclient

8
推荐指数
3
解决办法
1万
查看次数

使用证书进行服务器连接

我试图将代码从控制台应用程序转移到uwp,在这个使用ServicePointManager的控制台应用程序中使用所有证书,在uwp应用程序中我不使用它们并且文本有异常 - "无法建立与服务器的连接".

问题是 - 如何替换ServicePointManager并在uwp中应用所有证书(因为我不知道该服务器使用的证书类型).

CodePointManager代码如下:

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback
(bypassAllCertificateStuff); 

private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
  return true;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的答复!

c# uwp

6
推荐指数
1
解决办法
387
查看次数

使用Httpclient信任自签名证书

我正在尝试通过自签名证书发出失败的Web请求:

Client = new HttpClient(); 
HttpResponseMessage Response = await Client.GetAsync(Uri)//defined elsewhere 
Run Code Online (Sandbox Code Playgroud)

这会引发信任失败异常.

我httpclienthandler按照这里的建议再次尝试使用HttpClient允许不受信任的SSL证书:

 var handler = new HttpClientHandler();

 handler.ServerCertificateCustomValidationCallback = 
 (
   HttpRequestMessage message, 
   X509Certificate2 cert, 
   X509Chain chain, 
   SslPolicyErrors errors
  ) =>{return true; };//remove if this makes it to production 

  Client = new HttpClient(handler); 
Run Code Online (Sandbox Code Playgroud)

这会引发一个未实现异常的系统.

有没有其他方法可以信任自签名证书?我甚至在机器上安装了证书,但没有运气.

c# xamarin.ios dotnet-httpclient xamarin

5
推荐指数
1
解决办法
5081
查看次数

我应该在HttpClient中使用Using语句吗?

我正在创建一个API,充当应用程序和其他2个API之间的桥梁。我想知道最好的方法是什么。我正在使用HttpClient。该应用程序有近一千个用户。

我阅读了这篇文章https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/。我真的不应该使用using语句吗?我也在做同步api调用。这有什么作用吗?我做的效率高吗?

这是我的代码:

[HttpGet]
[Route("api/apiname")]     
public String GetNumberofP([FromUri]GetNumberofPRequest getNPRequest){          

    var request = JsonConvert.SerializeObject(getNPRequest);
    string errorMessage = "";           

    try{              
         httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.gettoken());

         var response = httpClient.GetAsync("api/MobileApp/GetNumberP?"
                      + "strCardNumber=" + getNPRequest.strCardNumber
                     + "&strDateOfBirth=" + getNPRequest.strDateOfBirth).Result;
         return response;
    }            
    catch (Exception e){                
        throw utils.ReturnException("GetNumberofP", e, errorMessage);           
    }      
}
Run Code Online (Sandbox Code Playgroud)

.net c# httpclient asp.net-web-api asp.net-core

2
推荐指数
1
解决办法
611
查看次数