相关疑难解决方法(0)

如何在ASP.NET MVC中正确处理404?

我正在使用RC2

使用URL路由:

routes.MapRoute(
    "Error",
     "{*url}",
     new { controller = "Errors", action = "NotFound" }  // 404s
);
Run Code Online (Sandbox Code Playgroud)

以上似乎照顾这样的请求(假设默认路由表由初始MVC项目设置):"/ blah/blah/blah/blah"

覆盖控制器本身中的HandleUnknownAction():

// 404s - handle here (bad action requested
protected override void HandleUnknownAction(string actionName) {
    ViewData["actionName"] = actionName;
    View("NotFound").ExecuteResult(this.ControllerContext);
}  
Run Code Online (Sandbox Code Playgroud)

但是,之前的策略不处理对Bad/Unknown控制器的请求.例如,我没有"/ IDoNotExist",如果我请求这个,我从Web服务器获取通用404页面而不是我的404,如果我使用路由+覆盖.

最后,我的问题是: 有没有办法在MVC框架中使用路由或其他东西来捕获这种类型的请求?

或者我应该默认使用Web.Config customErrors作为我的404处理程序并忘记所有这些?我假设如果我使用customErrors,由于Web.Config对直接访问的限制,我必须在/ Views之外存储通用404页面.

asp.net-mvc http-status-code-404

426
推荐指数
9
解决办法
13万
查看次数

ASP.NET MVC 404错误处理

可能重复:
如何在ASP.NET MVC中正确处理404?

我已经在Asp.Net MVC(RC 5)中的404 Http错误处理程序中进行了更改,我仍然得到标准的404错误页面.我需要在IIS中更改某些内容吗?

error-handling asp.net-mvc

129
推荐指数
3
解决办法
14万
查看次数

自定义ASP.NET MVC 404错误页面的路由

当有人键入不调用ASP.NET MVC中的有效操作或控制器的URL而不显示通用的"未找到资源"ASP.NET错误时,我试图创建自定义HTTP 404错误页面.

我不想使用web.config来处理这个问题.

是否有任何类型的路由魔法可以捕获任何无效的URL?

更新:我尝试了给出的答案,但我仍然得到丑陋的"资源未找到"消息.

另一个更新:好的,显然RC1中发生了一些变化.我甚至尝试过专门捕获404 HttpException,它仍然只是给了我"资源未找到"页面.

我甚至使用过MvcContrib的资源功能,没有 - 同样的问题.有任何想法吗?

asp.net asp.net-mvc custom-error-pages asp.net-mvc-routing http-status-code-404

116
推荐指数
7
解决办法
15万
查看次数

ASP.NET MVC自定义错误处理Application_Error Global.asax?

我有一些基本代码来确定我的MVC应用程序中的错误.目前在我的项目,我有一个名为控制器Error与操作方法HTTPError404(),HTTPError500()General().它们都接受一个字符串参数error.使用或修改下面的代码.将数据传递给Error控制器进行处理的最佳/正确方法是什么?我想尽可能提供强大的解决方案.

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();

    HttpException httpException = exception as HttpException;
    if (httpException != null)
    {
        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");
        switch (httpException.GetHttpCode())
        {
            case 404:
                // page not found
                routeData.Values.Add("action", "HttpError404");
                break;
            case 500:
                // server error
                routeData.Values.Add("action", "HttpError500");
                break;
            default:
                routeData.Values.Add("action", "General");
                break;
        }
        routeData.Values.Add("error", exception);
        // clear error on server
        Server.ClearError();

        // at this point how to …
Run Code Online (Sandbox Code Playgroud)

c# asp.net error-handling asp.net-mvc user-experience

104
推荐指数
7
解决办法
16万
查看次数

这种使用ELMaH和MVC气味的方法吗?

我一直在寻找使用ELMaH与ASP.Net MVC的一些方法,以便我可以使用自定义错误页面来处理包括404s在内的所有异常.

没有短缺问题 ,询问如何获得/Shared/Error.aspx在ASP.Net MVC正常工作-不论有无ELMAH.我没有遇到过这个任务的问题,但我觉得我在ELMaH旁边使用自定义404页面的解决方案太简单了,我不能动摇它应该有更多的感觉.

在Web.Config中启用customErrors后,我在HomeController中创建了一个新的Action:

public ActionResult PageNotFound()
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

从那里我在我的Global.asax文件中添加了一个新方法,以利用ELMaH的日志过滤功能,并在记录异常后,将响应重定向回上述PageNotFoundActionResult:

    public void errorLog_Filtering(object sender, ExceptionFilterEventArgs e)
    {
        if (e.Exception.GetType().Equals(typeof(HttpException)))
        {
            HttpException ex = (HttpException)e.Exception;
            if (ex.GetHttpCode() == 404)
                Response.Redirect("/Home/PageNotFound");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我是否忽略了默认情况下MVC附带的东西(因为我仍然找到了很多关于MVC的方法),或者过度思考存在更简单解决方案的问题?感谢任何输入.

asp.net-mvc elmah exception-handling http-status-code-404

7
推荐指数
1
解决办法
660
查看次数

MVC处理404s并设置默认错误页面

我想在MVC中启用默认路由.

我希望每个404请求重定向到DefaultController DefaultRout()

我发现如何能够捕获所有路径以处理ASP.NET MVC的'404 page not found'查询?

但{*url}不能正常工作我得到404并且没有重定向到默认页面.

我的代码:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
  routes.IgnoreRoute("{resource}.ascx/{*pathInfo}");
  routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
  routes.IgnoreRoute("{resource}.gif/{*pathInfo}");

  //http://localhost:4775/BW/A/Tasks
  routes.MapRoute("Pages", "A/{controller}", new { controller = "Tasks", action = "InitPage" });

  routes.MapRoute(
    "404-PageNotFound",
    "{*url}",
    new { controller = "Default", action = "DefaultRout" }
  );
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢

拉斐尔

model-view-controller asp.net-mvc

1
推荐指数
1
解决办法
2369
查看次数