ASP.NET Web API调用时出现: 基础连接已经关闭: 发送时发生错误

以下是调用API的页面, 用的是Razor的写法, 我测试了一下是在执行Stream dataStream = client.OpenRead(GetURL); 这句话的时候报错的, 错误信息是"基础连接已经关闭: 发送时发生错误", 但是我单独打开API是没有问题的, API地址是: https://webapi20200813111324....{parameter}, 后面的{parameter}可以是任何字符串.

@using Newtonsoft.Json;

@{

bool isConnectFailed = false;

string errorInfo = "error";

List<string> cards = new List<string>();

var playerName = Request["PlayName"];

if (IsPost)

{

string GetURL = "https://webapi20200813111324.azurewebsites.net/api/HandOfCards/" + playerName;

WebClient client = new WebClient();

try

{

Stream dataStream = client.OpenRead(GetURL);

StreamReader reader = new StreamReader(dataStream);

var results = JsonConvert.DeserializeObject<dynamic>(reader.ReadLine());

reader.Close();

foreach (var item in results)

{

cards.Add((string)item.imageLink);

}

}

catch (System.Net.WebException e)

{

isConnectFailed = true;

errorInfo = e.Message;

}

}

}

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<style>

body {

font-family: Verdana;

margin-left: 50px;

margin-top: 50px;

}

div {

border: 1px solid black;

width: 800px;

margin: 1.2em;

padding: 1em;

}

</style>

<title>BensCards: Deal yourself a hand.</title>

</head>

<body>

@if (IsPost)

{

<label id="labelGoal">Which player has the best hand.</label>

<br />

<div>

@if (isConnectFailed)

{

<p><label id="labelPlayer1">Web API Connection failed, Message: @errorInfo</label></p>

}

else

{

<p><label id="labelPlayer1">Player1: @playerName</label></p>

foreach (string card in cards)

{

<img width="75" height="100" alt="cardImage" src="https://deckofcards20200804.blob.core.windows.net/carddeck/@card" />

}

}

</div>

<label id="errorMessageLabel" />

}

else

{

<label id="labelGoal">

Enter the players name and deal the cards.

</label>

<br /><br />

<form method="post">

<div>

<p>Player 1: @Html.TextBox("PlayerName")</p>

<p><input type="submit" value="Deal Cards" class="submit" /></p>

</div>

</form>

}

</body>

</html>

以下是错误截图:
image

回答:

https://www.jianshu.com/p/370...

回答:

解决了,在13行前加入一行
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
即可.

@using Newtonsoft.Json;

@{

bool isConnectFailed = false;

string errorInfo = "error";

List<string> cards = new List<string>();

var playerName = Request["PlayerName"];

if (IsPost)

{

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //<--Add this line

string GetURL = "https://webapi20200816050913.azurewebsites.net/api/handOfCards/" + playerName;

WebClient client = new WebClient();

try

{

Stream dataStream = client.OpenRead(GetURL);

StreamReader reader = new StreamReader(dataStream);

var results = JsonConvert.DeserializeObject<dynamic>(reader.ReadLine());

reader.Close();

foreach (var item in results)

{

cards.Add((string)item.imageLink);

}

}

catch (System.Net.WebException e)

{

isConnectFailed = true;

errorInfo = e.Message;

}

}

}

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<style>

body {

font-family: Verdana;

margin-left: 50px;

margin-top: 50px;

}

div {

border: 1px solid black;

width: 800px;

margin: 1.2em;

padding: 1em;

}

</style>

<title>BensCards: Deal yourself a hand.</title>

</head>

<body>

@if (IsPost)

{

<label id="labelGoal">Which player has the best hand.</label>

<br />

<div>

@if (isConnectFailed)

{

<p><label id="labelPlayer1">Web API Connection failed, Message: @errorInfo</label></p>

}

else

{

<p><label id="labelPlayer1">Player1: @playerName</label></p>

foreach (string card in cards)

{

<img width="75" height="100" alt="cardImage" src="https://deckofcards20200804.blob.core.windows.net/carddeck/@card" />

}

}

</div>

<label id="errorMessageLabel" />

}

else

{

<label id="labelGoal">

Enter the players name and deal the cards.

</label>

<br /><br />

<form method="post">

<div>

<p>Player 1: @Html.TextBox("PlayerName")</p>

<p><input type="submit" value="Deal Cards" class="submit" /></p>

</div>

</form>

}

</body>

</html>

以上是 ASP.NET Web API调用时出现: 基础连接已经关闭: 发送时发生错误 的全部内容, 来源链接: utcz.com/p/190601.html

回到顶部