我在我的api中使用NancyFx:v2.0-clinteastwood,Asp.net Hosted(本地:IIS Express,远程:Aure Web App)。
我使用Nancy.Validation.FluentValidation
(v2.0-clinteastwood)并将JSON对象发布到POST端点。我故意向它发送一个不符合验证要求的对象。
执行验证并返回结果的代码(如果失败),看起来有点像这样。
var validationResult = this.Validate(POCO object i bind, data here is as expected);
if (!validationResult.IsValid)
{
return Response.AsJson(validationResult).WithStatusCode(HttpStatusCode.BadRequest);
}
当我在本地运行它时,返回的响应是内容类型:application/json
并且包含验证失败主体为Json( EXPECTED )。
当我远程运行时,返回的响应是内容类型:text/html
并且 NOT 包含验证失败正文。
我已在每行代码中设置日志记录,并确保没有自定义管道方法正在更改输出。我也试过编辑返回:
return Response.AsJson(validationResult).WithStatusCode(HttpStatusCode.BadRequest).WithContentType("application/json");
但仍然会返回text/html
。
我在小提琴手中复制了这个并剥去了其他所有标题。基本请求如下所示:
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标头配置正确。
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)托管版本时才会发生这种情况。任何人都可以解释这个重量或建议我应该调查的其他事情吗?
答案 0 :(得分:1)
归功于Nancy Slack的房间。您需要确保您的web.config包含以下内容以允许Nancy通过。
<system.webServer>
<httpErrors existingResponse="PassThrough"/>
</system.webServer>