错误处理ASP.NET MVC(Error handling ASP.NET MVC)

2019-09-28 18:51发布

我在做错误处理(403,404,500)。 我做了ErrorControllerViews

public class ErrorController : Controller
{
    // GET: Error
    public ActionResult General(Exception exception)
    {
        return View("Exception", exception);
    }

    public ActionResult Http404()
    {
        return View();
    }

    public ActionResult Http403()
    {
        return View();
    }

} 

然后我写了下面的代码在Global.asax.cs

protected void Application_Error()
{
    var exception = Server.GetLastError();
    log.Error(exception);
    Response.Clear();
    var httpException = exception as HttpException;
    var routeData = new RouteData();
    routeData.Values.Add("controller", "Error");

    if (httpException != null)
    {
        Response.StatusCode = httpException.GetHttpCode();

        switch (Response.StatusCode)
        {
            case 403:
                routeData.Values.Add("action", "Http403");
                break;
            case 404:
                routeData.Values.Add("action", "Http404");
                break;
            default:
                routeData.Values.Add("action", "Error");
                break;
        }
    }
    else
    {
        routeData.Values.Add("action", "General");
        routeData.Values.Add("exception", exception);
    }

    Server.ClearError();
    Response.TrySkipIisCustomErrors = true;
    IController errorsController = new ErrorController();
    errorsController.Execute(new RequestContext(
        new HttpContextWrapper(Context), routeData));
}

它的工作原理,当URL与控制器的名称(例如: http://localhost:62693/News/123 ),然后我得到了错误的404视图。

但是,当我在它或无效的控制器名称发送URL无控制器的名称(例如: http://localhost:62693/123http://localhost:62693/new/k ),我只拿到了HTML错误的404视图的代码。

我怎样才能得到错误的观点404与任何网址吗?

Answer 1:

收藏此上webConfig文件

<system.web>  
    <customErrors mode="On" defaultRedirect="~/Error/DefaultError">
</system.web>

// ErrorController ActionResult method...
public ActionResult DefaultError()
{
 return view();
}

使用处理错误RouteConfig

您可以使用路由约束来限制匹配特定的路线,浏览器的请求。 您可以使用正则表达式来指定一个路由约束。

自定义路由器必须被添加到RouterConfig文件。

这个new {productId = @"\d+" }是一个RouteConstraints

  routes.MapRoute(
             "Product",
             "{controller}/{action}/{productId}",
             new {controller="Home", action="Product"},
             new {productId = @"\d+" }
            );


Answer 2:

如果controlloller本身不存在,IIS使用预设的404错误页面。 看看.NET错误页的IIS功能视图。



Answer 3:

解决我的问题只是增加

Response.ContentType = "text/html";

其他方法:

我找到一些其他的方式来进行自定义的错误。

web.config中

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" />
    <error statusCode="404" responseMode="ExecuteURL" path="/Error/Http404" />
  </httpErrors>
</system.webServer>

调节器

public class ErrorController : Controller
{
    public ActionResult PageNotFound()
    {
        Response.StatusCode = 404;
        return View();
    }
}

这对我的作品。



文章来源: Error handling ASP.NET MVC