大佬教程收集整理的这篇文章主要介绍了使用 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 扩展程序发出相同的请求,它就可以完美运行:
为了以防万一,我在 RESTED 调用后分析了 Google Chrome 开发人员工具,但我没有发现任何奇怪的东西。我想也许我错过了在标题中发送其他内容。
有人知道来自 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,请注明来意。