- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我得到的错误:
One or more errors occurred.
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task`1.get_Result()
at myProject.mymethod(Int32[] myIds) in path\MyClass.cs:line 758
这是方法:
private void mymethod(int[] myIds)
{
var uri = new Uri(string.Format(UriPath, string.Format(MyPath)));
var client = GetHttpClient(uri);
var postModel = new PostModel
{
Ids = myIds,
LastUpdate = NewItem ? null : _lastUpdated
};
if (client != null)
{
var response = client.PostAsJsonAsync(uri, postModel).Result;//this line crashes
if (response.IsSuccessStatusCode)
{
//doSomething
}
}
}
我调用了很多这样的方法,除了这个之外,所有方法都有效。当它被击中时,它会花费很多时间然后抛出这个异常。使用所有其他方法都不会发生错误。
这是内部异常:
Inner.System.Threading.Tasks.TaskCanceledException: A task was canceled.
这是我的 GetCLient() 方法:
private HttpClient GetHttpClient(Uri uri)
{
var handler = new HttpClientHandler
{
CookieContainer = CoockieContainer
};
return new HttpClient(handler)
{
BaseAddress = uri
};
}
这是 API 方法:
[HttpPost]
public IList<MyModel> MyAPIMethod(PostModel model)
{
List<MyModel> myTranslations;
using (var db = new myEntities(GetDbConnStrByUser(new GetCookies().GetUserName())))
{
myTranslations = db.tblTranslations.Where(it => model.Ids.Contains(it.id)
&& (!model.Update.HasValue || it.update > model.LastUpdate.Value))
.Select(it => new MyModel
{
Id = it.id,
Name = it.name,
Description = it.desc,
LanguageId = it.language_id
}).ToList();
}
return myTranslations.GroupBy(x => new { x.Id, x.LanguageId }).Select(x => x.First()).ToList();
}
可能发生超时。
Fiddler 返回此错误:WAITING操作超时。
最佳答案
.Result 尝试将 Task 变成 T。它同步阻塞等待任务完成,只有在没有异常发生时才会返回 T。您应该预料到的两种类型的异常是 OperationCanceledExceptions/TaskCanceledExceptions(当 HTTP 请求超时或使用 CancellationToken 并且 token 被取消时——我认为后者在这里不适用)和一般/HTTP 相关的异常。
您可能遇到了 HTTP 超时情况。抛出异常需要很长时间吗?如果不是,您的 GetHttpClient
方法是什么样的?是否明确设置超时或取消标记?
如果你想坚持使用同步方法而不返回任务,你应该做这样的事情:
try
{
var response = client.PostAsJsonAsync(uri, postModel).Result;//this line crashes
}
catch (OperationCanceledException oce)
{
// Tell the user that the request timed our or you cancelled a CancellationToken
}
catch (Exception exc)
{
// Look at the HttpClient docs and try to catch something more specific. You don't want
// to swallow StackOverflowExceptions or OutOfMemoryExceptions.
}
如果您愿意尝试异步,这就是您要寻找的:
private async Task mymethodAsync(int[] myIds)
{
var uri = new Uri(string.Format(UriPath, string.Format(MyPath)));
var client = GetHttpClient(uri);
var postModel = new PostModel { ... };
if (client != null)
{
try
{
var response = await client.PostAsJsonAsync(uri, postModel);
if (response.IsSuccessStatusCode)
{
//doSomething
}
}
catch (OperationCanceledException oce)
{
// because timeouts are still possible
}
catch (Exception exc) {
// Because other things can still go wrong too (HTTP 500, parsing errors)
}
}
}
有关 .Result 调用如何使用 HttpClient 工作的更多信息,请参见此处:What happens while waiting on a Task's Result?
关于c# - 出现一个或多个错误 : PostAsJsonAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343940/
我的代码是 public class BaseDTO { public int Id { get; set; } public string Code { get; set; }
我创建了一个公开 REST 端点的 Azure 逻辑应用程序。 当我通过 postman 调用时,以下 JSON 主体工作正常。 { "to": "ggtest@yahoo.com", "
您好,我想捕获 PostAsJsonAsync 可能抛出的异常。我在微软网站上找不到任何关于此方法可能引发的异常的异常信息。我想处理任何可能的异常。 最佳答案 我相信因为它是 HttpClient 的
我正在尝试使用 HttpClient 和 C#。我正在尝试发布到 PHP REST 服务器并使用其返回的 JSON。当我发布到返回“Hello World!”的终点时一切安好。但是当它返回时{ "ke
我正在尝试使用 PostAsJsonAsync 调用 API,但它没有像我预期的那样工作。 repo : 创建一个 ASP.NET WebAPI 项目(.NET Framework 4.7.2) 将V
我在使用 PostAsJsonAsync(..) 时遇到了一个简单但烦人的问题扩展方法,我在任何地方都找不到有关解决以下问题的信息。 我的问题是生成的 Json 使用 PascaCasing我需要 c
这是我得到的错误: One or more errors occurred. at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean
我目前正在学习如何使用 OWIN 和 Katana 创建 C# 服务器。 我正在尝试回复 POST,但不幸的是它没有找到该功能。 这就是我所拥有的: 这是一个用户端类,它通过 POST 发送用户数据(
我正在尝试使用 SSIS 包中的一个 WEB API。我想在一个服务器文件夹中发布一个 pdf 文件。我为此创建了一个脚本任务。 但是当我执行那个包时,它给了我一些随机的运行时错误。 byte[] c
我目前正在向 API 发送一个 json 字符串以接收包含各种值的对象。 这是我发布的 json 字符串: {"SomeProperty":1,"DimensionOne":4,"DimensionT
我们正在使用 HttpClient 将 json 发布到 restful web 服务。在一个例子中,我们遇到了一些让我们感到困惑的事情。使用 postman、fiddler 等工具,我们可以发布到端
我有一个带有 WebAPI Controller 的 ASP.NET MVC 应用程序,以及一个使用这些 Controller 的控制台应用程序。控制台应用程序从计划任务运行并从远程源获取数据、解析数
我有这行代码 var response = new HttpClient().PostAsJsonAsync(posturi, model).Result; Called WebAPI Control
我将一个对象发布到 WebApi 方法。我正在使用 PostAsJsonAsync 来执行此操作。 public async Task PostAsync(string token, ServiceC
我有一个 Web api Controller ,我使用了 HttpClient PostAsJsonAsync() 方法;我的对象(Employee)是从基类(Person)继承的,但是在将对象发布
我在将 Web API 与 MVC 结合使用时遇到了一些问题,不确定是什么原因造成的,但它在 Debug模式下不会抛出任何异常或错误,请有人帮助解决这个问题。 代码如下: MVC Controller
我目前正在像这样发布到我的网络 api: client.PostAsJsonAsync("api/controller/methodincontroller", listOfProductObject
在等待 API 发布完成时抛出 AggregateException 我该如何解决这个问题? 我的API调用类似这样 using (var httpClient = new HttpClient())
我正在尝试使用 PostAsJsonAsync 以与更新前 PostJsonAsync 相同的方式使用,但我收到此错误: CS1503 参数 3:无法从 'ICCR.Shared.LoginModel
我在这里以及在the Elastic discussion forum上都发现了类似的问题,但不幸的是,所有答案都无济于事。 我目前正在使用ElasticSearch 7.0。 我想向我的Elasti
我是一名优秀的程序员,十分优秀!