【发布时间】:2018-04-28 00:31:01
【问题描述】:
我有一个简单的 WebAPI 项目,为方便起见,我创建了另一个控制器(具有相同的继承和行为,就像其他 API 控制器一样,我们现在称之为 App)用于登录、注册和加载单页站点。 App的基本位置是'/',api端点在'/api/'下。
如果我从“/api/”下调用方法,则响应是预期的 json 对象。但是,例如,当我从 App 调用 register (/register) 时,它成功了,它返回包装在“Ok”调用中的新创建的用户实体,但是一些中间件阻止了该过程并返回状态码 406 并带有一个空的 http身体。
我只使用默认的服务器设置,我没有篡改中间件。我在最基本的教程中添加了swagger,启用了静态资源,仅此而已。
我知道 406 是什么,我在客户端中将 Accept 标头设置为“application/json”。当我在 Visual Studio 中调试调用时,它确实包含 Request 属性中的 Accept 信息。
仅当我不在“/api/”路线中时才会发生这种情况。我怎样才能改变这种行为,以便我在“接受”中输入的任何内容,asp.net 都会尝试以该格式序列化数据?因为现在如果当前路由不在'/api/'下,它会以某种方式决定忽略标头的意图
编辑:我找到了一个非常弱的解决方案。如果我手动设置状态码(对于 200 以外的情况),而不是手动调用 Json 方法来返回 JsonResult,它可以工作。但这不是您对框架的期望,它应该为给定的 Accept 值找到合适的转换器。
【问题讨论】:
标签: asp.net json rest asp.net-web-api asp.net-core