.net core AuthenticationException WebAPI/ASP MVC dotnet Core
我有一个使用dotnet core的2个项目的解决方案 WebAPI项目->restapi MVC项目->连接到API以获取/发布值 我有一个核心库类,它有连接API的助手:.net core AuthenticationException WebAPI/ASP MVC dotnet Core,.net-core,asp.net-core-webapi,.net Core,Asp.net Core Webapi,我有一个使用dotnet core的2个项目的解决方案 WebAPI项目->restapi MVC项目->连接到API以获取/发布值 我有一个核心库类,它有连接API的助手: public abstract class APIHelper { protected HttpClient ApiClient; public APIHelper() { InitializeClient(); }
public abstract class APIHelper
{
protected HttpClient ApiClient;
public APIHelper()
{
InitializeClient();
}
private void InitializeClient()
{
ApiClient = new HttpClient();
//ApiClient.BaseAddress = new Uri("https://localhost:44333/api");
ApiClient.BaseAddress = new Uri("https://localhost:5001/api");
ApiClient.DefaultRequestHeaders.Accept.Clear();
ApiClient.DefaultRequestHeaders.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
}
我有一个从该类继承并调用API的类:
public async Task<IEnumerable<Category>> Get()
{
using (HttpResponseMessage response = await ApiClient.GetAsync("api/Category"))
{
if (response.IsSuccessStatusCode)
{
var readed = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<IEnumerable<Category>>(readed);
return result;
}
else
{
throw new Exception();
}
}
}
我尝试使用http而不是https,结果是一样的
我尝试使用不同的浏览器,但结果相同
我在Windows和Linux上试过,结果都一样
当我尝试使用Postman时,它会得到值,因此WebPI项目没有问题(我认为是这样)
我不知道该怎么办
干杯。您的SSL证书似乎有问题,您可以绕过此错误,如下所示。我没有尝试您的代码,但在从HttpClient初始化新对象后添加以下代码时,它始终有效
// bypass bad SSL certificate errors
ServicePointManager.ServerCertificateValidationCallback =
delegate (object s, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
因此,您的API助手应该如下所示
public abstract class APIHelper
{
protected HttpClient ApiClient;
public APIHelper()
{
InitializeClient();
}
private void InitializeClient()
{
ApiClient = new HttpClient();
// bypass bad ssl certificate errors
ServicePointManager.ServerCertificateValidationCallback =
delegate (object s, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
//ApiClient.BaseAddress = new Uri("https://localhost:44333/api");
ApiClient.BaseAddress = new Uri("https://localhost:5001/api");
ApiClient.DefaultRequestHeaders.Accept.Clear();
ApiClient.DefaultRequestHeaders.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
}
当您使用visual studio进行调试时,它使用iisexpress作为默认启动选项,并为iisexpress配置了端口和SSL证书 然后,Iisexpress将根据您使用的dotnet版本和web.config中的配置,与dotnet应用程序进行对话,可以是进程中的,也可以是反向代理 当您使用dotnetrun运行它时,它使用kestrel,您需要在代码中设置端口、SSL证书和所有内容。检查program.cs和startup.cs文件中的代码
其中一个应用程序应该调用usekestrel,该应用程序具有可配置的kestrel附加选项。您是否可以尝试使用RestSharp客户端连接到API,并从该链接查看如何使用它()你能试着执行这个命令吗?'dotnet dev certs https--trust'?根据这个链接:我用了这个,它工作了,我用了这个,这对你没有帮助。你需要用这个。也可以在这里查看GitHub问题,了解更多背景和信息
public abstract class APIHelper
{
protected HttpClient ApiClient;
public APIHelper()
{
InitializeClient();
}
private void InitializeClient()
{
ApiClient = new HttpClient();
// bypass bad ssl certificate errors
ServicePointManager.ServerCertificateValidationCallback =
delegate (object s, X509Certificate certificate,
X509Chain chain, SslPolicyErrors sslPolicyErrors)
{ return true; };
//ApiClient.BaseAddress = new Uri("https://localhost:44333/api");
ApiClient.BaseAddress = new Uri("https://localhost:5001/api");
ApiClient.DefaultRequestHeaders.Accept.Clear();
ApiClient.DefaultRequestHeaders.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
}