【发布时间】:2013-05-31 00:01:34
【问题描述】:
我有一个在 Content-type 标头中使用带有 application/json 的请求调用的操作。这些请求将自动创建一个尝试反序列化请求内容的 JsonValueProvider。当json格式错误时,value provider会抛出异常,导致应用的错误页面。
要重现此行为,只需将无效的 json 数据发布到发送 application/json 作为 Content-type 标头的操作。这将触发异常。
[编辑]
不需要太多代码。只需创建一个空的控制器方法并使用 Firefox“Poster”之类的工具向操作发送无效请求。
public class HomeController
{
public ActionResult Index()
{
return this.Json(true);
}
}
然后使用海报:
- 将内容类型设置为
application/json - 将请求内容设置为
{"This is invalid JSON:,} - 发送请求
结果将是完整的标准 ASP.NET HTML 错误页面(通用或自定义,取决于您的应用程序)。
[/编辑]
由于嵌入式设备调用了我的操作,我想发送简短的响应,而不是 HTML 错误页面。我希望能够创建状态码为 500、内容类型:text/plain 的响应以及异常消息的内容。
我已经尝试了自定义模型绑定器和自定义错误处理程序属性,但由于异常发生在处理管道中的早期,因此两者都没有被调用。有没有办法处理这个错误?
作为一种解决方法,我目前已为整个应用程序禁用 JsonValueProvider 并自己从请求正文中加载值。如果有办法在每个操作的基础上禁用 JsonValueProvider,这也会有所帮助。
提前感谢您的任何指点!
【问题讨论】:
-
你能从你的代码中发布一些示例吗?
标签: asp.net-mvc json exception asp.net-mvc-4 error-handling