首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StructureMap & 404错误

StructureMap & 404错误
EN

Stack Overflow用户
提问于 2011-07-13 19:37:36
回答 2查看 244关注 0票数 0

我将这个作为我的DefaultControllerFactory覆盖:

代码语言:javascript
复制
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看起来像这样:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-13 21:04:24

我认为这个问题存在于"404-PageNotFound“路由声明中。如果您希望由ErrorController处理此问题,则应该指定"Error“作为路由值,而不是像asp.net mvc控制器命名约定那样指定"ErrorController”。在本例中,可能是因为无法导航到"ErrorController“而呈现了asp.net默认的404错误。

代码语言:javascript
复制
 routes.MapRoute(
                "404-PageNotFound",
                "{*url}",
                new { controller = "Error", action = "PageNotFound" }
                );
票数 0
EN

Stack Overflow用户

发布于 2011-07-13 20:07:56

您的路由"{controller}/{action}/{id}"将仅处理mydomain.com/asd/asd/asd

如果你有这么深的文件夹结构,那么你需要添加处理所有文件夹的路由。

为了捕获未找到的页面,您必须在web.config中设置customErrors

代码语言:javascript
复制
<system.web>
   <customErrors mode="On" defaultRedirect="~/error">
      <error statusCode="404" redirect="~/error/notfound"></error>
   </customErrors>

当抛出404错误时,自定义页面仍然需要一个显示错误页面的路由。要解决这个问题,只需添加所有customErrors的路由即可。

代码语言:javascript
复制
 routes.MapRoute(
            "404-PageNotFound",
            "error/notfound",
            new { controller = "ErrorController", action = "PageNotFound" }
            );

您可以将customErrors设置为指向处理所有错误的单个页面,但这不是最好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6678238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档