我将这个作为我的DefaultControllerFactory覆盖:
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, System.Type controllerType)
{
if (controllerType == null) return base.GetControllerInstance(requestContext, controllerType);
return (IController)ObjectFactory.GetInstance(controllerType);
}
}我的Global.asax看起来像这样:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "ErrorController", action = "PageNotFound" }
);
}当我转到mydomain.com/asd/asd/asd/asd/asd/asd时,它抛出一个404异常,然后查看web.config中的customErrors节点来决定要做什么。
我不确定这是否正确,因为我会认为我的路由应该处理这个问题,而不是customErrors。
发布于 2011-07-13 21:04:24
我认为这个问题存在于"404-PageNotFound“路由声明中。如果您希望由ErrorController处理此问题,则应该指定"Error“作为路由值,而不是像asp.net mvc控制器命名约定那样指定"ErrorController”。在本例中,可能是因为无法导航到"ErrorController“而呈现了asp.net默认的404错误。
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);发布于 2011-07-13 20:07:56
您的路由"{controller}/{action}/{id}"将仅处理mydomain.com/asd/asd/asd
如果你有这么深的文件夹结构,那么你需要添加处理所有文件夹的路由。
为了捕获未找到的页面,您必须在web.config中设置customErrors
<system.web>
<customErrors mode="On" defaultRedirect="~/error">
<error statusCode="404" redirect="~/error/notfound"></error>
</customErrors>当抛出404错误时,自定义页面仍然需要一个显示错误页面的路由。要解决这个问题,只需添加所有customErrors的路由即可。
routes.MapRoute(
"404-PageNotFound",
"error/notfound",
new { controller = "ErrorController", action = "PageNotFound" }
);您可以将customErrors设置为指向处理所有错误的单个页面,但这不是最好的解决方案。
https://stackoverflow.com/questions/6678238
复制相似问题