我在MVC 2应用程序中使用自己的控制器工厂,这个标准代码似乎正在进行中:
protected override IController GetControllerInstance(RequestContext reqContext, Type controllerType)
{
...
// Error handling
if (controllerType == null)
{
throw new HttpException(
404, String.Format(
"The controller for path '{0}' could not be found" +
" or it does not implement IController.",
reqContext.HttpContext.Request.Path
)
);
}
...
}
我遇到的问题是其他人问过的问题,这个错误处理逻辑和我的ELMAH捕获的某些资源已经被数百个无意义错误填充。更令人讨厌的是,它使调试变得痛苦,必须保持F5错误。这些资源是:favicon.ico,Error.aspx(我的自定义错误页面),以及特定文件夹中的一些图像。
所以我遵循this帖子的建议,试图通过忽略global.asax中的路由来解决问题:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("elmah.axd");
routes.IgnoreRoute("/Content/images/{*pathinfo}"); // This has succesfully rid me of a bunch of errors
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" }); // This has successfully rid me of the favicon error
routes.IgnoreRoute("{*allaspx}", new { allaspx = @"(.*/)?.aspx(/.*)?" }); // NOT SURE OF THIS ONE
...
);
}
正如我在评论中提到的,这已经清除了许多错误。我现在的问题是,当我启动应用程序时,我是immediatley给出了404死亡屏幕,告诉我我的自定义错误页面无法找到。错误详情:
System.Web.HttpException(0x80004005):文件'/Error.aspx'不存在。 在System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) 在System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context,VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate) 在System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath,HttpContext context,Boolean allowCrossApp,Boolean throwIfNotFound) 在System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,Type requiredBaseType,HttpContext context,Boolean allowCrossApp) 在System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context,String requestType,VirtualPath virtualPath,String physicalPath) 在System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context,String requestType,VirtualPath virtualPath,String physicalPath) at System.Web.HttpApplication.MapHttpHandler(HttpContext context,String requestType,VirtualPath path,String pathTranslated,Boolean useAppConfig) 在System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)
网页配置部分:
<system.web>
<customErrors mode="On" defaultRedirect="Error.aspx" />
...
</system.web>
在我对路由进行更改之前,错误页面工作正常。如果我注释掉/ content / images路径 - 应用程序再次工作(虽然我回到“无法找到路径'{0}的控制器',或者它没有实现IController”错误)。评论favicon或allaspx路线对此404错误没有任何改变。
非常感谢任何帮助。
干杯,
添
答案 0 :(得分:0)
问题是设置错误页面错误。
我回到了最开始,this教程。我没有ErrorController并且正在使用HandleError属性。按照此链接中的说明修复了错误页面的问题。忽略为favicon工作的路线的答案。其他文件真的丢失了文件。
答案 1 :(得分:0)
我们收到了相同的错误消息,但问题不同,我们传递的可选参数包含/
字符,这会导致应用程序查找不同的路由。因此,请确认您的参数不包含/
字符。