在 Post 请求上重定向时 HttpClient 超时 [Mono/Xamarin]

问题描述 投票:0回答:1

我已将其报告为错误: https://bugzilla.xamarin.com/show_bug.cgi?id=30604

之前报道过这里: https://bugzilla.xamarin.com/show_bug.cgi?id=22384

问题是,如果您向服务器发出 Post 请求,而该服务器以重定向进行回复,则 HttpClient 将超时。如果您使用 MS .NET,则不会出现此问题,您必须使用 Mono 运行(在 Windows/Android/iOS 上测试)

以下是重现方法:

您需要拥有 MonoXamarin StudioMonoDevelop 才能使用 Mono 运行客户端控制台应用程序。

创建一个新的 ASP.NET 项目并将以下方法添加到某个控制器(我使用默认的 Home 控制器):

    [HttpPost]
    public ActionResult DeleteComment(int commentId)
    {
        return Redirect("/Home/Contact");
    }

创建一个新的控制台项目:

    var client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost:55141/"); // use the correct port
    client.Timeout = TimeSpan.FromSeconds(10); // Doesn't have to be 10, just to save time. You can leave it as default

    var content1 = new StringContent("{\"commentid\":1}");
    content1.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    try {
        var r1 = client.PostAsync("/home/DeleteComment", content1).Result; // Change to your method url
        var test = r1.StatusCode;
    }
    catch (Exception e) {
        return;
    }

这将:

  • 服务器接收并回复成功
  • 在控制台应用程序中抛出异常“任务已取消”。

了解更多:

c# asp.net mono dotnet-httpclient
1个回答
0
投票

我知道,这个问题已经很老了,但是如果有人使用 HttpClient 遇到这个问题,这个解决方案可能会帮助你。

HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);
© www.soinside.com 2019 - 2024. All rights reserved.