程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 C# HttpClient 时收到 HTTP 500 响应大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 C# httpClient 时收到 http 500 响应?

开发过程中遇到使用 C# httpClient 时收到 http 500 响应的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 C# httpClient 时收到 http 500 响应的解决方法建议,希望对你解决使用 C# httpClient 时收到 http 500 响应有所启发或帮助;

我开发了一个 C# 应用程序,它调用网络中某些 PC 中存在的 REST 服务。

这是发出请求的代码:

    public async Task<bool> OpenDoorAsync(String name,int delay)
    {
        var data = await CallAPIAsync("API/door/remoteOpenByname",new Dictionary<String,String> { { "doorname",name },{ "interval",delay.ToString() } });
        return data.Issuccess;
    }

    private async Task<ResponseData> CallAPIAsync(String endPoint,Dictionary<String,String> parameters)
    {
        try
        {
            using (httpClIEnt clIEnt = new httpClIEnt())
            {
                clIEnt.Timeout = TimeSpan.FromSeconds(30);
                clIEnt.Defaultrequestheaders.Connection.ParseAdd("keep-alive");

                var content = new StringContent(String.Empty,EnCoding.UTF8,"application/Json");
                String fullUri = "http://192.168.0.122:8088/API/door/remoteOpenByname?doorname=10.185.85.237-1&interval=5&access_token=1234";
                httpResponsemessage response = await clIEnt.PostAsync(fullUri,content);
                response.EnsuresuccessstatusCode();
                String responseBody = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<ResponseData>(responseBody);
            }
        }
        catch (Exception eX)
        {
            OnError("Existió un error al realizar la llamada.",eX);
            return new ResponseData()
            {
                message = "Failed"
            };
        }
    }

入口点是 OpenDoorAsync,以这种方式调用,来自 Winform 表单:

await _device.openDoorAsync(TxtNombrePuerta.Text.Trim(),InTinterval.value);

好吧,执行PostAsync方法后,返回http 500错误:

{StatusCode: 500,ReasonPhrase: 'Internal Server Error',Version: 1.1,Content: System.Net.http.StreamContent,headers:
{
  Connection: close
  Date: Thu,28 Jan 2021 21:06:35 GMT
  Set-cookie: JsESSIONID=4062B932CDB44B4CA3FCCC275937AC15; Path=/; httpOnly
  Server: Apache-Coyote/1.1
  Content-Length: 2580
  Content-Language: en
  Content-Type: text/HTML; charset=utf-8
}}

但是,如果我使用 Google Chrome RESTED 扩展程序发出相同的请求,它就可以完美运行:

使用 C# HttpClient 时收到 HTTP 500 响应

为了以防万一,我在 RESTED 调用后分析了 Google Chrome 开发人员工具,但我没有发现任何奇怪的东西。我想也许我错过了在标题中发送其他内容。

使用 C# HttpClient 时收到 HTTP 500 响应

有人知道来自 C# 应用程序的调用发生了什么吗?显然,我没有做 RESTED 所做的事情。

解决方法

您的工作示例正在传递 cookie,这可能是您正在调用的 API 所必需的。

,

我真的不知道为什么它在使用 httpClient 类时不起作用,但是,我解决了安装使用 RestSharp NuGet 包的问题。

最后把代码简化成这样:

    private ResponseData CallApi(String endPoint,Dictionary<String,String> parameters)
    {
        try
        {
            String fullUri = $"http://{GetServerIp()}:{((MainWindow)MainWindow).ServerPort}/{endPoint}?{GetQueryParameters(parameters)}";
            var client = new RestClient(fullUri);
            var request = new Restrequest(Method.POST);
            var response = client.Execute(request);
            return JsonConvert.DeserializeObject<ResponseData>(response.Content);
        }
        catch (Exception eX)
        {
            OnError("Existió un error al realizar la llamada.",eX);
            return new ResponseData()
            {
                message = "failed"
            };
        }
    }

大佬总结

以上是大佬教程为你收集整理的使用 C# HttpClient 时收到 HTTP 500 响应全部内容,希望文章能够帮你解决使用 C# HttpClient 时收到 HTTP 500 响应所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。