标题说明了一切。实际上有很多关于如何做到这一点的信息,而且我非常接近。我读过关于谷歌几件事情,以及下面的计算器帖子:在运行IIS 6的ASP.NET MVC 3应用程序上处理404's
How can I properly handle 404 in ASP.NET MVC?
How can I properly handle 404 in ASP.NET MVC?
Custom error pages on asp.net MVC3
http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/
我有404的工作在操作层面。我在我的控制器上使用* .aspx后缀。如果您的网址类似于
"http://blahblah/AppName/idontexist.aspx"
加载了自定义错误控制器。我的问题归结为没有.aspx并且不存在的控制器。这产生了典型的IIS服务器404 html页面,我不想要。作品中的另一个扭曲是我无法真正改变IIS配置本身。我必须通过代码/ web.config/global.asax(或者我没有想到的项目的其他部分)来处理这个问题。
这里是我的web.config项(这是根web.config,而不是视图中的一个):
<httpErrors defaultPath="/Error.aspx/HttpError" errorMode="Custom" existingResponse="Replace" defaultResponseMode="ExecuteURL">
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="500" path="/Error.aspx/HttpError" responseMode="ExecuteURL" />
<error statusCode="404" path="/Error.aspx/NotFound" responseMode="ExecuteURL" />
</httpErrors>
<customErrors mode="On" defaultRedirect="~/Error.aspx/HttpError">
<error redirect="~/Error.aspx/NotFound" statusCode="404" />
</customErrors>
这里是我的路线在Global.asax中:
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "StartController", action = "StartAction", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"NotFoundController", // Route name
"{controller}.aspx", // URL with parameters
new { controller = "Error", action = "NotFound" } // Parameter defaults
);
routes.MapRoute(
"NotFoundController2", // Route name
"{controller}", // URL with parameters
new { controller = "Error", action = "NotFound" } // Parameter defaults
);
routes.MapRoute(
"Root", // Route name
"", // URL with parameters
new { controller = "StartController", action = "StartAction", id = UrlParameter.Optional } // Parameter defaults
);
我还认为,使用路由来捕捉这些问题的一个障碍是我失去了404状态代码;然而,因为路线指向专门为此设计的行动,我想这一点是没有意义的。无论如何,任何想法,建议或批评都会受到欢迎。我在这里很亲密。谢谢!
编辑1
我仍然一直在研究这个。有没有一种方法可以定义自定义路由约束,如果在URL中找不到文本“.aspx”,它将重定向到错误控制器?
EDIT 2
看起来不像那是约束打算如何使用。我也试过在http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/实现按实施
protected void Application_Error()
{
}
方法,但是当我不指定的.aspx的控制器,它看起来像应用程序从未得到机会抛出一个错误。它看起来像我的应用程序甚至可以响应它之前由IIS处理。
如果我可以进行IIS更改,最好只是该应用程序的虚拟目录条目,是否可以为此提供更可行的解决方案?
如果只有某处我可以抓取网址,搜索.aspx,并且如果找不到,则会抛出404找不到,但重定向到应用程序级别404页面而不是IIS默认值,这将会非常接近理想。
想法?
编辑3
我在处理这个场景仅仅是不可能的,除非你的应用是根网站IIS服务器,而不是一个虚拟目录的意见。我注意到,在IIS 6.0中,你可以调整默认的IIS错误页面。不仅如此,您可以用URL替换某些案例。我已经尝试使用虚拟目录网站执行此操作,但显示默认的IIS 404未找到页面。
所以它等于:如果您对安装程序有一个愚蠢的控制权限,并且您为此操作的站点是根站点,则可以在IIS 6上处理此问题。
不是很适用于我想象的真实场景。
令人难以置信的404令人难以置信的404处理可以如何。 – 2013-02-11 16:25:54
一些更多的帮助在这里.. http://www.devcurry.com/2012/06/aspnet-mvc-handling-exceptions-and-404.html – Amitd 2013-02-11 16:38:19
这真的是相当惊人的。我怀疑这个应用程序的用户会去调整网址,但使用默认的IIS页面看起来并不专业。 – jason 2013-02-11 16:38:37