IIS 8.5 400错误请求

时间:2018-12-05 16:34:34

标签: asp.net .net .net-core iis-8

使用IIS 8.5托管的ASP.Net Core Web Api应用程序时遇到一些困难。 IIS 8.5针对特定的发布请求返回400状态代码。

错误请求由Web应用程序执行,该Web应用程序托管在同一域中且具有不同的端口。已将API配置为处理cors,并且成功完成了错误请求的预检。

我注意到了一件奇怪的事情: 部署了Api,其中包括Swagger UI。因此,我尝试使用Swagger UI重现该错误。但是在这种情况下,请求成功。 这两个请求的正文和url绝对相同,并且标头中没有任何明显的区别,当然,除了请求的来源。

看起来请求根本没有被Api处理(在这种情况下,我应该会在日志文件中看到某件事),因此,我很确定该错误发生在IIS本身的某个地方。

我已经研究过httperr.log文件。它包含请求失败时的流线:

  

2018-12-05 15:38:36 192.168.100.132 62121 192.168.100.173 1142   HTTP / 1.1 POST / api / some / request / path 400 13 BadRequest myServicePool

我希望此文件包含有关错误原因的更多详细信息。 我想知道“ BadRequest”前的“ 13”是否有特殊含义?

有人根据给出的信息有一个想法,为什么会发生此错误?我真的不这么认为。但是,如果有人可以给我一个提示,可以在哪里搜索有关错误原因的更多详细信息,我将非常高兴。 让我知道您是否需要更多详细信息。

2 个答案:

答案 0 :(得分:0)

最好在代码中提供示例代码,以说明如何发送请求。

但是,根据给定的事实,我认为问题出在请求主体的内容中。甚至连招摇的请求和您发送的请求看起来也完全一样,在某些方面也应该有所不同。

您是否正在使用JSON转换器?如果您使用的是JSON转换器,并且要将.NET模型序列化为JSON字符串并附加到请求中,请确保使用 Camel Case 对其进行格式化。

因为默认情况下,它可能只是按Pascal情况转换.NET模型。

示例

我将使用 Newtonsoft JSON 库对此进行详细说明。

.NET模型序列化而未指定格式

var businessLeadJson = JsonConvert.SerializeObject(ObjectA);

已转换的结果-{"Company":"sample","ContactName":"contact 1"}

通过指定格式序列化的.NET模型

var businessLeadJson = JsonConvert.SerializeObject(businessLead, new 
      JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() });

已转换的结果-{"company":"sample","contactName":"contact 1"}

请注意JSON字符串中属性名称的大小写。第一个字母第一个字母为大写。

因此,我建议您尝试通过指定格式来序列化作为有效负载(请求主体)附加的对象,因为REST API期望JSON字符串采用正确的格式。

在序列化请求正文的对象时,请指定驼峰格式。

祝你好运..

答案 1 :(得分:0)

我只是设法偶然重现此错误。

问题是,如果用户尚未登录,则应用程序将发送一个空的Authorization-Header。

似乎在某些配置/ IIS版本上,或者在系统之间有什么区别的情况下,都会导致请求失败,在某些情况下也没问题。