Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient、HTTP/2和客户端证书.pfx、.p12_C#_Asp.net_.net Core_Asp.net Core 1.0_Asp.net Core Webapi - Fatal编程技术网

C# HttpClient、HTTP/2和客户端证书.pfx、.p12

C# HttpClient、HTTP/2和客户端证书.pfx、.p12,c#,asp.net,.net-core,asp.net-core-1.0,asp.net-core-webapi,C#,Asp.net,.net Core,Asp.net Core 1.0,Asp.net Core Webapi,如何在.Net Core>=1.0中重新编写这段c#代码 我读到HttpClient不支持 .Net Framework 4.5版本 解决方案:-.Net核心版本 虽然不得不将证书从.p12更改为.pfx(私钥+SSL证书),但最终还是成功地让它工作了。它不适用于。p12 private FormUrlEncodedContent GetLoginBodyAsContent(string username, string password) { var po

如何在.Net Core>=1.0中重新编写这段c#代码

我读到HttpClient不支持


.Net Framework 4.5版本
解决方案:-.Net核心版本 虽然不得不将证书从.p12更改为.pfx(私钥+SSL证书),但最终还是成功地让它工作了。它不适用于。p12

    private FormUrlEncodedContent GetLoginBodyAsContent(string username, string password)
    {
        var postData = new List<KeyValuePair<string, string>>();
        postData.Add(new KeyValuePair<string, string>("username", username));
        postData.Add(new KeyValuePair<string, string>("password", password));
        return new FormUrlEncodedContent(postData);
    }

    private async Task<LoginResponse> Login(string username, string password, string certFilename)
    {
        var clientHandler = GetClientHandler();

        var handler = AddCert(clientHandler, certFilename);
        var client = InitHttpClientInstance(handler, this.AppKey);

        var content = GetLoginBodyAsContent(username, password);

        var result = await client.PostAsync("/api/certlogin", content);
        result.EnsureSuccessStatusCode();
        var jsonSerialiser = new DataContractJsonSerializer(typeof(LoginResponse));
        var stream = new MemoryStream(await result.Content.ReadAsByteArrayAsync());
        var response = (LoginResponse)jsonSerialiser.ReadObject(stream);
        return response;
    }
    private HttpClientHandler AddCert(HttpClientHandler clientHandler, string certFilename)
    {
        var certPfx = new X509Certificate2(certFilename);
        clientHandler.SslProtocols = SslProtocols.Tls12;
        clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
        clientHandler.ClientCertificates.Add(certPfx);

        clientHandler.ServerCertificateCustomValidationCallback += 
            (HttpRequestMessage req, X509Certificate2 cert2, X509Chain chain, SslPolicyErrors err) => { return true; };

        return clientHandler;
    }
    private HttpClient InitHttpClientInstance(HttpMessageHandler clientHandler, string appKey, string baseUrl = DefaultAuthServiceUrl)
    {
        var client = new HttpClient(clientHandler);
        client.BaseAddress = new Uri(baseUrl);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("X-Application", appKey);
        client.DefaultRequestHeaders.ExpectContinue = true;
        client.DefaultRequestHeaders.Add("Connection", "Close");

        return client;
    }
    private HttpClientHandler GetClientHandler()
    {
        var clientHandler = new HttpClientHandler();
        return clientHandler;
    } 
private FormUrlEncodedContent GetLoginBodyContent(字符串用户名、字符串密码)
{
var postData=新列表();
添加(新的KeyValuePair(“用户名”,username));
添加(新的KeyValuePair(“密码”,password));
返回新的FormUrlEncodedContent(postData);
}
专用异步任务登录(字符串用户名、字符串密码、字符串文件名)
{
var clientHandler=GetClientHandler();
var handler=AddCert(clientHandler,certFilename);
var client=InitHttpClientInstance(处理程序,this.AppKey);
var content=getLoginBodyContent(用户名、密码);
var result=wait client.PostAsync(“/api/certlogin”,content);
result.EnsureSuccessStatusCode();
var jsonSerialiser=新的数据契约jsonserializer(typeof(LoginResponse));
var stream=newmemoryStream(wait result.Content.ReadAsByteArrayAsync());
var响应=(LoginResponse)jsonSerialiser.ReadObject(流);
返回响应;
}
私有HttpClientHandler-AddCert(HttpClientHandler-clientHandler,字符串certFilename)
{
var certPfx=新的X509Certificate2(certFilename);
clientHandler.SslProtocols=SslProtocols.Tls12;
clientHandler.ClientCertificateOptions=ClientCertificateOptions.Manual;
clientHandler.ClientCertificates.Add(certPfx);
clientHandler.ServerCertificateCustomValidationCallback+=
(HttpRequestMessage-req,X509Certificate2-cert2,X509Chain-chain,SslPolicyErrors-err)=>{return true;};
回程钳;
}
私有HttpClient InitHttpClientInstance(HttpMessageHandler-clientHandler,string-appKey,string-baseUrl=DefaultAuthServiceUrl)
{
var客户端=新的HttpClient(clientHandler);
client.BaseAddress=新Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
client.DefaultRequestHeaders.Add(“X-Application”,appKey);
client.DefaultRequestHeaders.ExpectContinue=true;
client.DefaultRequestHeaders.Add(“连接”,“关闭”);
返回客户;
}
私有HttpClientHandler GetClientHandler()
{
var clientHandler=新的HttpClientHandler();
回程钳;
} 

似乎.net内核意味着让生活变得困难。。样板太多,容易出错。

试试看。您链接到的问题不相关。这是关于Windows UWP应用程序的。你试过了吗,它甚至没有用.net内核编译。CS1061“HttpWebRequest”不包含“ClientCertificates”的定义,也没有扩展方法……您必须提供完整的问题描述,包括任何编译错误。您链接到的问题无效。从您的问题中不清楚您是否确实尝试过-听起来好像您发现并发出了链接问题,并停止了尝试链接问题也是关于HttpClient的,而不是HttpWebRequest。你试过使用HttpClient吗?为什么要使用HttpWebRequest?如何重新编写这段c代码?我应该说清楚。
    private FormUrlEncodedContent GetLoginBodyAsContent(string username, string password)
    {
        var postData = new List<KeyValuePair<string, string>>();
        postData.Add(new KeyValuePair<string, string>("username", username));
        postData.Add(new KeyValuePair<string, string>("password", password));
        return new FormUrlEncodedContent(postData);
    }

    private async Task<LoginResponse> Login(string username, string password, string certFilename)
    {
        var clientHandler = GetClientHandler();

        var handler = AddCert(clientHandler, certFilename);
        var client = InitHttpClientInstance(handler, this.AppKey);

        var content = GetLoginBodyAsContent(username, password);

        var result = await client.PostAsync("/api/certlogin", content);
        result.EnsureSuccessStatusCode();
        var jsonSerialiser = new DataContractJsonSerializer(typeof(LoginResponse));
        var stream = new MemoryStream(await result.Content.ReadAsByteArrayAsync());
        var response = (LoginResponse)jsonSerialiser.ReadObject(stream);
        return response;
    }
    private HttpClientHandler AddCert(HttpClientHandler clientHandler, string certFilename)
    {
        var certPfx = new X509Certificate2(certFilename);
        clientHandler.SslProtocols = SslProtocols.Tls12;
        clientHandler.ClientCertificateOptions = ClientCertificateOption.Manual;
        clientHandler.ClientCertificates.Add(certPfx);

        clientHandler.ServerCertificateCustomValidationCallback += 
            (HttpRequestMessage req, X509Certificate2 cert2, X509Chain chain, SslPolicyErrors err) => { return true; };

        return clientHandler;
    }
    private HttpClient InitHttpClientInstance(HttpMessageHandler clientHandler, string appKey, string baseUrl = DefaultAuthServiceUrl)
    {
        var client = new HttpClient(clientHandler);
        client.BaseAddress = new Uri(baseUrl);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("X-Application", appKey);
        client.DefaultRequestHeaders.ExpectContinue = true;
        client.DefaultRequestHeaders.Add("Connection", "Close");

        return client;
    }
    private HttpClientHandler GetClientHandler()
    {
        var clientHandler = new HttpClientHandler();
        return clientHandler;
    }