NancyFX 从 Response.AsJson 返回 text/html

NancyFX returning text/html from Response.AsJson

我在 api 中使用 NancyFx:v2.0-clinteastwood,Asp.net 托管(本地:IIS Express,远程:Aure Web App)。

我正在使用 Nancy.Validation.FluentValidation (v2.0-clinteastwood) 并将 JSON object 发布到 POST 端点。我故意向它发送一个未满足我的验证要求的 object。

执行验证和 return 结果(如果失败)的代码看起来有点像这样。

 var validationResult = this.Validate(POCO object i bind, data here is as expected);
 if (!validationResult.IsValid)
 {
      return Response.AsJson(validationResult).WithStatusCode(HttpStatusCode.BadRequest);
 }

当我在本地 运行 时,响应 returned 的内容类型为:application/json 并包含验证失败 body 作为 Json(预期)。

当我远程 运行 时,响应 returned 的内容类型为:text/html 并且 NOT 包含验证失败 body.

我已经在每一行代码中设置了日志记录,并确保没有自定义管道方法正在更改输出。我还尝试将 return 编辑为:

return Response.AsJson(validationResult).WithStatusCode(HttpStatusCode.BadRequest).WithContentType("application/json");

然而 text/html 仍然是 returned。

我在 fiddler 中复制了这个并剥离了所有其他 header。基本请求如下所示:

POST https://justatestdomain.com/endpoint HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: justatestdomain.com
Content-Length: x

{"property1":"value 1","property2":"value2"}

我还可以确认我的 CORS header 已正确配置。

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Accept, Origin, Content-Type, Authorization, x-ms-request-id, x-ms-request-root-id

这仅在针对远程 (Azure) 托管版本时发生。任何人都可以解释这个重物或建议我应该调查的其他事情吗?

归功于 Nancy Slack 房间。您需要确保您的 web.config 包含以下内容以允许 Nancy 通过。

<system.webServer>
     <httpErrors existingResponse="PassThrough"/>
</system.webServer>

更多,具体详情可以上NancyFx Wiki - Custom Errors on Asp.Net