gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 4 : Handle exception caused by JsonValueProvider

转载 作者:行者123 更新时间:2023-12-03 08:00:50 25 4
gpt4 key购买 nike

我有一个使用带有 application/json 的请求调用的操作在内容类型 header 中。这些请求将自动创建一个尝试反序列化请求内容的 JsonValueProvider。当 json 格式错误时,值提供者会抛出异常,导致应用程序的错误页面。

要重现此行为,只需将无效的 json 数据发布到发送 application/json 的操作即可。作为内容类型 header 。这将触发异常。

[编辑]

不需要太多代码。只需创建一个空的 Controller 方法并使用 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 ,以及异常的消息作为它的内容。

    我已经尝试过自定义模型绑定(bind)器和自定义错误处理程序属性,但由于异常在处理管道中较早发生,因此两者都没有被调用。有没有办法处理这个错误?

    作为一种解决方法,我目前已为整个应用程序禁用 JsonValueProvider 并自己从请求正文中加载值。如果有办法在每个操作的基础上禁用 JsonValueProvider,这也会有所帮助。

    提前感谢您的任何指点!

    最佳答案

    您可以订阅 Global.asax 中的 Application_Error 事件并根据需要处理异常:

    protected void Application_Error(object sender, EventArgs e)
    {
    var exception = Server.GetLastError();
    Response.TrySkipIisCustomErrors = true;
    Response.Clear();
    Server.ClearError();
    Response.StatusCode = 500;
    Response.ContentType = "text/plain";
    Response.Write("An error occured while processing your request. Details: " + exception.Message);
    }

    关于asp.net-mvc - ASP.NET MVC 4 : Handle exception caused by JsonValueProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16920409/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com