0

祝大家有美好的一天!试图解决一个问题。我使用一种方法来处理网站上的所有错误(此方法在一个人的博客上找到)

全球.asax

protected void Application_Error(object sender, EventArgs e)
{
    HttpContext ctx = HttpContext.Current;
    Exception ex = ctx.Server.GetLastError();
    ctx.Response.Clear();

    RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;
    IController controller = new CategoryController(); 
    var context = new ControllerContext(rc, (ControllerBase)controller);

    var viewResult = new ViewResult();

    var httpException = ex as HttpException;
    if (httpException != null)
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                viewResult.ViewName = "Error404";
                break;

            case 500:
                viewResult.ViewName = "Error500";
                break;

            default:
                viewResult.ViewName = "Error";
                break;
        }
    }
    else
    {
        viewResult.ViewName = "Error";
    }

    viewResult.ViewData.Model = new HandleErrorInfo(ex, context.RouteData.GetRequiredString("controller"), context.RouteData.GetRequiredString("action"));
    viewResult.ExecuteResult(context);
    ctx.Server.ClearError();
}

当我在工作室中启动项目时,导致错误。我在该代码中遇到异常:

RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;

例外:

无法将“ ”类型的对象转换为“ ”System.Web.DefaultHttpHandler类型System.Web.Mvc.MvcHandler

一旦我停止调试(Shift + F5)。此方法效果很好并且可以处理任何错误。但是在项目开始时,导致错误。寻找这些主题的解决方案,但没有找到这个问题。请帮忙。

[HandleError]
public class CategoryController : Controller
{
     // some methods
}
4

1 回答 1

1

通过使用代码解决了他的问题:

void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
            if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
            {
                Response.Redirect("~/Error/404");
            }
            else
            {
                Response.Redirect("~/Error/Other");
            }
            Server.ClearError();
        }
于 2013-03-08T23:59:59.630 回答