asp.net-mvc - 从网站到外部 Web api 的简单 POST 失败
问题描述
我有一个 asp .net MVC 页面
我正在尝试连接到Eventbrite:s api
简而言之,它要求您将客户端 ID 发送到一个 url,使用 HttpGET 和 HttpPOST 将结果和更多信息发送到另一个 url。
GET 很好,我得到了所需的(auth)“代码”。当我尝试对第二个网址进行 POST 时,我得到
“套接字异常:现有连接被远程主机强行关闭”
我可以使用Postman和 GET 请求中的信息发布到第二个 url,它工作正常,我得到了 auth 令牌就好了。
这是我使用的代码
var parameters = new Dictionary<string,string>();
parameters.Add("code", pCode);
parameters.Add("client_secret", CLIENT_SECRET);
parameters.Add("client_id", CLIENT_APP_KEY);
parameters.Add("grant_type", "authorization_code");
using (var client = new HttpClient())
{
var req = new HttpRequestMessage(HttpMethod.Post, pUrl) { Content = new FormUrlEncodedContent(parameters) };
var response = client.SendAsync(req).Result;
return response.Content.ReadAsStringAsync().Result;
}
在发布到 Azure 时,我对类似问题的记忆模糊。由于我必须使用公共返回 url 注册我的应用程序,因此我无法使用 fiddler 查看请求。
我的网站正在运行 https。我还测试了添加以下行(来自一些谷歌搜索)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
但后来我得到404错误......
我也对此进行了测试(结果相同)
using (var client = new HttpClient())
{
var response = client.PostAsync(pUrl, content).Result;
authToken = response.Content.ReadAsStringAsync().Result;
}
我已经测试过获取身份验证代码并从本地计算机运行 POST,结果相同......
我已经联系了 eventbrite 开发人员支持,看看他们是否也可以帮助我......
解决方案
此 POST 必须包含以下 urlencoded 数据以及 Content-type:
application/x-www-form-urlencoded
标头。
由于您的内容类型是application/x-www-form-urlencoded
您需要对 POST 正文进行编码,特别是如果它包含&
在表单中具有特殊含义的字符。然后使用以下函数发布您的数据:
using (var httpClient = new HttpClient())
{
using (var content = new FormUrlEncodedContent(parameters))
{
content.Headers.Clear();
content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
HttpResponseMessage response = await httpClient.PostAsync(url, content);
return await response.Content.ReadAsAsync<TResult>();
}
}
您提供的错误消息表示远程端关闭了连接,原因是:
·您正在向应用程序发送格式错误的数据。
·客户端和服务器之间的网络连接由于某种原因断开了。
·您在第三方应用程序中触发了导致其崩溃的错误。
·第三方应用程序已耗尽系统资源。
·放ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
更多细节可以参考这个案例。
推荐阅读
- ruby-on-rails - respond_to 做 |格式| format.js 不工作(ruby on rails & ajax)
- powerbi - 基于用户输入的 Power BI 报告
- survey - 如何在 REDCap 中为重复工具的新实例创建 [survey-url]?
- nlp - 如何将 BertforSequenceClassification 模型权重加载到 BertforTokenClassification 模型中?
- r - 从存储库中读取选定数据集的构建函数
- google-cloud-platform - GCP 的虚拟机实例经常崩溃/停止
- php - WordPress Navwalker 无法在移动设备上打开
- node.js - 下载节点模块时出错
- dialogflow-es - 对话框流中响应缓慢并带有警告消息
- c++ - 当我输入极长的字符串以获取子字符串时,已调用 C++ Abort()