我正在使用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页面.
我想要显示500,404和403的自定义错误页面.这是我所做的:
在web.config中启用了自定义错误,如下所示:
<customErrors mode="On"
defaultRedirect="~/Views/Shared/Error.cshtml">
<error statusCode="403"
redirect="~/Views/Shared/UnauthorizedAccess.cshtml" />
<error statusCode="404"
redirect="~/Views/Shared/FileNotFound.cshtml" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)HandleErrorAttribute在FilterConfig类中注册为全局动作过滤器,如下所示:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomHandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
}
Run Code Online (Sandbox Code Playgroud)为上述每条消息创建了自定义错误页面.500的默认值已经开箱即用.
在每个自定义错误页面视图中声明该页面的模型 System.Web.Mvc.HandleErrorInfo
对于500,它显示自定义错误页面.对于其他人,它没有.
有什么我想念的吗?
看起来这并不是显示自定义错误的全部内容,因为我OnException在HandleErrorAttribute类的方法中读取代码并且它只处理500.
我该怎么做才能处理其他错误?
是否有可能创建一个捕获所有的最终路由...并将用户弹回到ASP.NET MVC中的404视图?
注意:我不想在我的IIS设置中进行此设置.
我正在使用Visual Studio 2012和MVC 4 Framework,如果未处理异常,我希望看到共享文件夹的友好错误页面.(我知道,作为一个开发者,我需要查看错误详细信息,但我只想测试此设置)
到目前为止,我知道在web.config的system.web部分添加以下代码应该可以做到这一点
<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了这个:
'/'应用程序中的服务器错误.
运行时错误说明:服务器上发生应用程序错误.此应用程序的当前自定义错误设置可防止查看应用程序错误的详细信息.
详细信息:要在本地服务器计算机上查看此特定错误消息的详细信息,请在位于当前Web应用程序根目录中的"web.config"配置文件中创建标记.然后,此标记应将其"mode"属性设置为"RemoteOnly".要使详细信息可在远程计算机上查看,请将"mode"设置为"Off".
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="RemoteOnly"/>
</system.web> </configuration>
Run Code Online (Sandbox Code Playgroud)
注意:通过修改应用程序配置标记的"defaultRedirect"属性以指向自定义错误页面URL,可以将自动查看的当前错误页面替换为自定义错误页面.
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="mycustompage.htm"/>
</system.web> </configuration>
Run Code Online (Sandbox Code Playgroud)
我想按照描述进行操作,而不是使用向HomeController添加操作,设置路由或其他内容的解决方法.
这应该起作用的参考如下:
http ://pluralsight.com/training/players/PSODPlayer?author = scott -allen&name = mvc3-building-control-mode = live&clip = 0 &course = aspdotnet-mvc3-intro
(在左侧选择章节"动作过滤器"并跳至分钟3:30)
更新(链接已更改):
http ://pluralsight.com/training/Player?author = scott -allen&name = mvc4-building-m2-control-mode = live&clip = 0 &course=mvc4 -building
(在顶部单击指示"ASP.NET MVC 4中的Controller"的细线,然后单击"Action Filters"并跳到分钟5:00)
是否有人知道为什么我看不到友好的错误页面有上面提到的设置?
提前致谢!
我一直在寻找使用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的方法),或者过度思考存在更简单解决方案的问题?感谢任何输入.
我想在我的项目中添加自定义错误页面.我发现这个帖子关于我的问题,我尝试实现它.
所以:
404.cshtml,404.html,500.cshtml和500.html页HandleErrorAttribute到全局过滤器但现在当我尝试通过http://localhost:120/foo/bar我的应用程序所在的路径时,我http://localhost:120得到下一页:
'/'应用程序中的服务器错误.
运行时错误
描述:处理您的请求时发生异常.此外,执行第一个异常的自定义错误页面时发生另一个异常.请求已终止.
我开始<customErrors mode="Off"看看有什么问题.这是 - The resource cannot be found.这是合乎逻辑的.但是当我设置<customErrors mode="On"- 我再次得到运行时错误.
是什么导致它以及如何解决?
我的配置文件:
<system.web>
<customErrors mode="Off" redirectMode="ResponseRewrite" defaultRedirect="~/500.cshtml">
<error statusCode="404" redirect="~/404.cshtml"/>
<error statusCode="500" redirect="~/500.cshtml"/>
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="404.html" responseMode="File"/>
<remove statusCode="500"/>
<error statusCode="500" path="500.html" responseMode="File"/>
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
IIS 8.5版