【问题标题】:REST Client is not waiting for REST API ServiceREST 客户端不等待 REST API 服务
【发布时间】:2022-02-02 15:57:57
【问题描述】:

我有 REST API 服务。下面是 API Controller 方法。

public class ExcelUploadController : ApiController
{
    [HttpPost]
    public async Task<HttpResponseMessage> Upload(HttpRequestMessage request)
    {
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        HttpPostedData postedData = await Request.Content.ParseMultipartAsync();
        ProcessFile postedFile = new ProcessFile(postedData);

        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(postedFile.Process())
        };
    }
  }

返回上传的excel的JSON数据。

下面是我使用 RESTSharp 的客户端代码

int ReadWriteTimeout = -1;
RestClient restClient = new RestClient("https://restfulservice.domain.com");
RestRequest restRequest = new RestRequest("api/excelupload/Upload");

int readWriteTimeout = restRequest.ReadWriteTimeout > 0
       ? restRequest.ReadWriteTimeout
       : ReadWriteTimeout;

restRequest.ReadWriteTimeout = -1;
restClient.Timeout = -1;
restClient.ReadWriteTimeout = -1;
restRequest.Method = Method.POST;
restRequest.AddHeader("Content-Type", "multipart/form-data");
restRequest.AddFile("content", location);
restRequest.AddParameter("DetailLineNumber", "4");

var response = restClient.Execute<List<ActualsDataViewModel>>(restRequest);

我希望我的客户等到服务完成处理。但是客户端没有等待,响应对象为空白意味着状态码为 0。并且 response.Data 为空。

如果我在 localhost 中运行相同的 REST API 服务并在 Client 中替换下面的代码,那么它工作得非常好。

 RestClient restClient = new RestClient("http://localhost:5100");

为什么如果相同的服务在服务器 (IIS) 上运行,那么客户端不等待响应?

【问题讨论】:

  • 您是否与其他客户确认过?可能添加一个可以使用 curl 或 web-client 调用的快速测试功能,以确保服务器实际发送回一些东西?我遇到了其他可以在本地测试服务器上运行但在我们的官方服务器上运行的问题(不是 REST)。
  • 您是否使用 Rest 客户端检查过您的 Rest API 以确保您的服务正常工作?
  • postedFile.Process() 的输出是什么?可以翻译成List&lt;ActualsDataViewModel&gt;吗?
  • 嗨@Wolf-Kun,sayah imad 和Chetan 是的,我已经使用邮递员和谷歌的RPC 测试了服务器响应,它工作正常。 Json 正确转换为 List.

标签: c# asp.net-web-api restsharp


【解决方案1】:

发布答案以节省其他人的时间。我让它工作了。

我在调用 REST API 之前添加了以下行。这个答案是@Hans Vonn 在Unable to read data from the transport connection : An existing connection was forcibly closed by the remote host 第二个答案中提出的。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2017-12-14
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多