开发者

Return special JsonResult in case of Exception occurs

开发者 https://www.devze.com 2023-02-08 17:27 出处:网络
public JsonResult Menu() { // Exception } I need ap开发者_StackOverflowplication not to redirect user to the 404 page, but return special JSON result like { \"result\":1 }.
public JsonResult Menu() { // Exception }

I need ap开发者_StackOverflowplication not to redirect user to the 404 page, but return special JSON result like { "result":1 }.

I wonder, is there any another solution, not try-catching.


You can implement your own FilterAttribute similar to the HandleErrorAttribute.

The HandleErrorAttribute normally does a redirect when an error occurs, but you could implement a similar attribute that returns a JsonResult. Something like the following will do:

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        filterContext.Result = new JsonResult
        {
            Data = new { result = 1 },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
        filterContext.ExceptionHandled = true;
    }
}

And then

[CustomHandleError]
public JsonResult Menu()
{
    throw new Exception();
}

I would recommend that you download the MVC source code from CodePlex and inspect the current implementation of HandleErrorAttribute. It is a lot more subtle than my crude implementation above and you may want some of its functionality.

0

精彩评论

暂无评论...
验证码 换一张
取 消