ASP.NET MVC5在异常后重定向到ErrorPage

时间:2018-01-17 09:43:14

标签: c# asp.net exception-handling asp.net-mvc-5

我编写了一个自定义异常过滤器来记录我的应用程序异常 在异常之后我想将用户重定向到错误页面 以下是我的代码

我的代码完全正常,它可以捕获异常,但是在记录之后它不会让我陷入错误页面,你能帮忙吗

我的CustomException Filer类

public class CustomExceptionFilterAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        try
        {
            string requestBody = "", Action = "", Controller = "";

            try 
            {
                requestBody = filterContext.HttpContext.Request.Form.ToString();
                        Action = filterContext.RouteData.Values["action"].ToString();
                        Controller = filterContext.RouteData.Values["controller"].ToString();
            }
            catch (Exception)
            {
            }

            StringBuilder sbHeader = new StringBuilder();
            sbHeader.AppendLine(filterContext.RequestContext.HttpContext.Request.Headers.ToString());
            StaticMethods.LogException(SessionHelper.LoginCode.ToString(), Action, Controller, filterContext.Exception.Message, filterContext.RequestContext.HttpContext.Request.RawUrl.ToString(), requestBody, sbHeader.ToString());

            // This is which i am more concern about
            filterContext.RouteData.Values.Add("Error", filterContext.Exception.Message);
            filterContext.Result = new RedirectToRouteResult(
                                       new RouteValueDictionary(new { controller = "Error", action = "Error" }));
        }
        catch(Exception ex)
        {
        }
    }
}

这是我的ErrorController

public class ErrorController : Controller
    {
        // GET: Error
        public ActionResult Error()
        {
            ViewBag["ErrorMessage"] = RouteData.Values["Error"];
            return View();
        }
    }

这是我的Error.cshtml

<div class="alert alert-danger">
    <environment names="Development">
        <strong>Error!</strong> Some Error Occured.
    </environment>
    <environment names="Staging,Production">
        <strong>Error!</strong> @ViewBag.ErrorMessage
    </environment>
</div>

有人可以帮忙 我只想在记录异常后重定向到错误页面 它仍然显示黄页错误

谢谢

5 个答案:

答案 0 :(得分:2)

不明白为什么要使用ErrorAttribute。 您可以轻松地将Global.asax文件用于应用程序级错误。

 public byte[] generateGIF(ArrayList<Bitmap> bitmaps) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    encoder.start(bos);
    for (Bitmap bitmap : bitmaps) {
        encoder.addFrame(bitmap);
    }
    encoder.finish();
    return bos.toByteArray();
}

答案 1 :(得分:0)

如果要将其重定向到另一个页面,则需要指定目录。

return View();

这基本上意味着返回带有错误视图包的当前页面。 你可以尝试

return redirect("~/Error"); //return redirect("url of the page")

答案 2 :(得分:0)

您需要在web.config中添加错误页面

<system.web>
  <customErrors mode="On" defaultRedirect="~/Error/Index">
    <error statusCode="500" redirect="~/Error/YourPage"/>             
  </customErrors>
<system.web/>

答案 3 :(得分:0)

这是一个建议。你会尝试这样做吗。

{{1}}

答案 4 :(得分:0)

在ASP.NET MVC 5中,您可以使用此功能:

if(/*Some error*/){
    return View("Error");
}