加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC路由 – 所有看起来都匹配正确的路由

发布时间:2020-12-16 07:45:48 所属栏目:asp.Net 来源:网络整理
导读:我有一个具有“一般”路径结构的站点,以及一个额外的“翻译”区域.所以在顶层,你有类似的东西: / /关于(“通用”) /翻译(区域) 在Translate区域内,我有: /翻译/ Word(WordController,索引操作) /翻译/ Word / Add(WordController,添加动作) /翻译/ Word /
我有一个具有“一般”路径结构的站点,以及一个额外的“翻译”区域.所以在顶层,你有类似的东西:

> /
> /关于(“通用”)
> /翻译(区域)

在Translate区域内,我有:

> /翻译/ Word(WordController,索引操作)
> /翻译/ Word / Add(WordController,添加动作)
> /翻译/ Word /改进(WordController,改进动作)

所有这些工作.

但是,只要我在现有结构中添加另一个控制器,例如.定义……

> /翻译/定义(DefinitionController,索引动作)
> /翻译/定义/添加(DefinitionController,添加操作)

或发音……

> /翻译/发音(发音控制器,索引动作)
> /翻译/发音/添加(发音控制器,添加动作)

我得到的只是404.

我所在地区的路由配置如下:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Translate_direct","Translate/{controller}/{action}",new { action = "Index",controller = "Default",}
        );
        context.MapRoute(
            "Translate_default","Translate/{toLanguageCode}/{query}/{fromLanguageCode}/{controller}/{section}/{action}/{id}",controller="Default",id = UrlParameter.Optional,section=UrlParameter.Optional }
        );
    }

我已安装Phil Haack’s RouteDebugger并获得以下结果:

因此它似乎与Controller和Action相匹配,但我得到的是404.

为了完整性和保证,还显示了我的“MVC”文件结构:

我显然错过了一些显而易见的东西,但不确定是什么……?

更新:

似乎我的命名空间以某种方式涉及.

我的TranslateAreaRegistration类的命名空间为Taggloo.Web.Client.Areas.Translate,但我的PronunciationController的命名空间为* Taggloo.Web.** Mvc.** Client.Areas.Translate.Controllers *

似乎我的命名空间中的错误导致两者不同(TranslateAreRegistration类也应该在Taggloo.Web.Mvc.Client.Areas.Translate命名空间中)是问题.我尝试将它们都制作成Taggloo.Web.Mvc ….但这不起作用.我不情愿地将它们都设置为Taggloo.Web.Client ……而现在它可以工作了.

所以不是一个解决方案,一个解决方法,尽管环顾四周,我仍然没有明白为什么.

解决方法

如果使用AreaRegistrationContext.MapRoute重载之一,则MVC(System.Web.Mcv.AreaRegistration.RegisterAllAreas)中的默认区域注册使用Area的AreaRegistration派生类的命名空间将Namespace数据标记添加到路由定义.

然后,如果定义了此Namespaces标记,则DefaultControllerFactory在匹配路由时交叉检查控制器的名称空间.

如果控制器的命名空间相同(或者如果命名空间令牌以.*结尾,则以令牌开头),则工厂将匹配控制器类型并继续实例化控制器.如果它不匹配,并且ControllerFactory从GetControllerType方法返回null,最终你将获得404.

你提到你将它们都设置为Taggloo.Web.Mvc ….如果它们是相同的,它应该有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读