我必须使用ASP.NET应用程序:一个是Web API,另一个是向第一个发出请求的MVC。
Everthing在开发中工作(VS与IIS Express),但现在我将这两个应用程序发布到生产服务器,我无法使用MVC应用程序访问api。
我在API上启用了CORS:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
在MVC应用上,我的api基本网址设置为 https://localhost:44351/ ,然后在IIS中我有这个绑定(WEB Api网站):
我可以使用邮递员向API发出请求但是当我运行我的MVC应用程序时,我无法发出请求(并且我可以再次开发它们。)
谢谢。
修改
控制器代码示例(MVC):
try
{
var client = WebApiHttpClient.GetClient();
var response = await client.PostAsync("Token", content);
if (response.IsSuccessStatusCode)
{
TokenResponse tokenResponse =
await response.Content.ReadAsAsync<TokenResponse>();
WebApiHttpClient.storeToken(tokenResponse);
return RedirectToAction("Index", "Home");
}
else
{
return Content("response.StatusCode);
}
}
catch
{
return Content("Error");
}
我的HttpClient实现:
public const string WebApiBaseAddress = "https://localhost:44351/";
public static HttpClient GetClient()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(WebApiBaseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
编辑2
InnerException消息:
the underlying connection was closed could not establish trust relationship for the ssl/tls
答案 0 :(得分:2)
总结一下评论中的讨论。 问题是由于在IIS中使用自签名证书进行Web API应用程序。
此问题的临时解决方案是在应用程序启动类(Global.asax)中添加此行代码:
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
当然,您不应该在生产中使用该行代码。在生产环境中,您应该拥有有效的SSL证书。
更多信息可以在这篇文章中找到: Could not establish trust relationship for SSL/TLS secure channel -- SOAP