C# 使用PostAsync方法的HttpClient错误

C# 使用PostAsync方法的HttpClient错误,c#,asp.net-mvc,webclient,C#,Asp.net Mvc,Webclient,使用HttpClient向第三方API进行PostAsync调用时。我在执行client.PostAsync时正好看到此错误。你知道这是什么原因吗 代码: 公共类JobController:AsyncController { 公共操作结果视图页() { 返回视图(“~/Views/Pages/Submit.cshtml”); } 私有常量字符串ServiceUrl=”https://api.3points.io/v1/applications/"; [HttpPost] 公共异步任务提交() {

使用HttpClient向第三方API进行PostAsync调用时。我在执行client.PostAsync时正好看到此错误。你知道这是什么原因吗

代码:

公共类JobController:AsyncController
{
公共操作结果视图页()
{
返回视图(“~/Views/Pages/Submit.cshtml”);
}
私有常量字符串ServiceUrl=”https://api.3points.io/v1/applications/";
[HttpPost]
公共异步任务提交()
{
var client=新的HttpClient();
var formData=new MultipartFormDataContent();
var encoded=Convert.ToBase64String(Encoding.UTF8.GetBytes(“abc123”));
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“基本”,编码);
foreach(Request.Form.AllKeys中的var键)
Add(新的StringContent(Request.Form[key]),String.Format(“{0}\”,key));
foreach(Request.Files.AllKeys中的字符串键)
{
var file=Request.Files[key];
如果(file==null | | file.ContentLength我会改变

var response = client.PostAsync(ServiceUrl, formData).Result


然后监视错误。

将以下两行添加到web.config文件中:

// First tag might exist already
<httpRuntime targetFramework="4.5" />
<appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
//第一个标记可能已经存在
:

启用新的等待友好型异步管道 在4.5中介绍。我们的许多同步原语在早期 ASP.NET版本有一些不好的行为,例如在公共服务器上使用锁 对象或违反API约定。事实上,ASP.NET 4 SynchronizationContext.Post的实现是一个阻塞 同步调用!新的异步管道力求 高效,同时遵守其API的预期合同。 新的管道还对数据执行少量的错误检查 代表开发人员,例如检测对 异步void方法

某些功能(如WebSocket)需要设置此开关。 重要的是,async/await的行为在ASP.NET中没有定义 除非已设置此开关。(请记住:设置也足够。)


<代码> PaseActhCy]()/Case>是异步方法,需要考虑等待(需要向方法添加异步提示),或者执行Toas. WaIT(),然后获取响应。之前也出现过同样的问题,但没有任何运气,这是正确的。如果没有wait关键字,PostAsync之后的其余代码将继续执行并返回JsonResult。如果PostAsync返回错误,它可能不会在捕获中被捕获。当我添加wait时,它会强制我将操作方法设置为异步并将类型返回到任务。所有这些更改就绪后,我在执行Wait client.PostAsync调用时看到null异常。相同的异常,还是不同的异常?谢谢。您是否在运行Fiddler时尝试过此操作,以查看数据是否离开系统并到达端点?这样您可以验证POST数据是否已按预期组装。不,它没有命中外部终结点。我没有看到请求发出。我尝试了此操作,但遇到了相同的问题。视图是否需要知道它是由异步控制器抛出的?我认为问题可能是同步上下文作为null传递给延续回调:最后,这个答案解决了我的问题他day@Lali很高兴这有帮助:)
var response = client.PostAsync(ServiceUrl, formData).Result
var response = await client.PostAsync(ServiceUrl, formData);
// First tag might exist already
<httpRuntime targetFramework="4.5" />
<appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />