【问题标题】:Checking the Web API's Response Always Returns 500 Error (without an Error on Server)检查 Web API 的响应总是返回 500 错误(服务器上没有错误)
【发布时间】:2018-10-04 16:19:16
【问题描述】:

每次我发送请求时,响应都会说它有 500 服务器错误。但是,我控制了这个过程的双方,并且服务器没有出错。想法?!

以下是我们如何设置 HttpClient 来发送请求。顺便说一句,此客户端托管在 Microsoft 的 Dynamix CRM Online 中(以防万一):

client = new HttpClient();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/javascript"));

这就是我们从 CRM Online 中调用它并获得响应的方式:

var task = client.PostAsyncSecurely("api/Invoices/CreateInvoice/", iHelper);
var result = task.GetAwaiter().GetResult();                    

是的,我们创建了自己的扩展,但它所做的只是将我们传入的模型转换为发送(根据接收 API,它正在工作)。

public static Task<System.Net.Http.HttpResponseMessage> PostAsyncSecurely(this System.Net.Http.HttpClient client, string requestUri, System.Net.Http.ByteArrayContent content)
{
    return client.PostAsync(requestUri, content);
}

我们尝试了多种方式,在我们服务器上的 Web API 中创建响应,但无济于事:

[HttpPost]
public HttpResponseMessage CreateInvoice([FromBody]Object invoiceHelper)

return Request.CreateResponse(HttpStatusCode.OK);
return new HttpResponseMessage(HttpStatusCode.OK);
return this.StatusCode(HttpStatusCode.OK);

【问题讨论】:

  • 它是否进入了您的 ControllerMethod?
  • 它正在进入我的控制器操作,并一直通过它,至少到返回响应的位置。
  • 此外,Window 的事件日志中没有任何内容。这些 IIS 日志中也没有任何内容:C:\Windows\System32\LogFiles\HTTPERR
  • 您可以使用Fiddler(或任何HTTP 流量监控工具)来确认请求发送正确吗?
  • 请求正确到达我们的 API,并得到正确处理。

标签: asp.net-web-api dynamics-crm dotnet-httpclient dynamics-crm-online


【解决方案1】:

要使用 Dynamics CRM Online WebAPI,您需要在租户的 Azure AD 中将您的应用程序注册为允许应用程序 (Microsoft Link)

连接到 Dynamics CRM Online 的另一种方法是使用 SDK(如果您使用 .NET 语言)https://docs.microsoft.com/en-us/dotnet/api/microsoft.xrm.sdk.messages.createrequest?view=dynamics-general-ce-9

希望对你有帮助

【讨论】:

  • 我们不会调用 CRM。这是由 CRM 托管的自定义代码,调用本地服务器。
  • 哦,好的,您是直接调用 IP 地址吗?还是您使用的是 DNS 地址? dynamicscrm 仅支持使用 DNS 地址的外部调用
  • 呼叫从 CRM 中的客户端到达服务器。但是当服务器发送响应时,无论响应是什么,加载到 CRM 中的客户端都会说收到 500 错误。
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多