捕获控制器

时间:2016-01-18 06:26:59

标签: c# asp.net-mvc controller

当我重定向到控制器中的非现有功能时,我得到空白页面。 它不是404错误!

例如我有这个控制器:

public class AccountController
{
  public ActionResult Index()
{
return view();
}
}

现在,例如,我将转到此网址: http://localhost:2993/Account/sdfjhsdkfjhsdf

我会得到一个空白页。

我的问题是,有没有办法抓住它?

谢谢

2 个答案:

答案 0 :(得分:0)

是的,您可以在404中抓住global.asax。处理Application_Error,如下所示 -

    public void Application_Error(Object sender, EventArgs e)
    {
        var exception = Server.GetLastError();
        Server.ClearError();

        var routeData = new RouteData();
        routeData.Values.Add("area", "");
        routeData.Values.Add("controller", "Error");

        if (exception.GetType() == typeof(HttpException))
        {
            var code = ((HttpException)exception).GetHttpCode();
            if (code == 404)
            {
                routeData.Values.Add("action", "Index");
            }
        }
        else
        {
            routeData.Values.Add("action", "Index");
            routeData.Values.Add("statusCode", 500);
        }

        routeData.Values.Add("exception", exception);

        Response.TrySkipIisCustomErrors = true;
        IController controller = new ErrorController();
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        Response.End();
    }

并将ErrorController定义如下。您可以在此处使用不同的Action方法来处理404,401等不同的错误。

public class ErrorController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

答案 1 :(得分:0)

或者您可以在请求结束时捕获此代码我如何处理它。

  protected void Application_EndRequest(object sender, System.EventArgs e)
    {
        switch (Response.StatusCode)
        {
            case 404:
                Response.ClearContent();
                Response.RedirectToRoute("Default", new RouteValueDictionary() { { "controller", "error" }, { "action", "Index" }, { "statuscode", Response.StatusCode } });
                break;
        }
    }

添加一个名为ErrorController的新控制器

ErrorController.cs

public class ErrorController : Controller
{
    // GET: Error
    public ActionResult Index()
    {
        return View();
    }
}

错误/ Index.cshtml

<h2>bad request</h2>