我有一个具有“一般”路线结构的站点和一个附加的“翻译”区域。所以在顶层,你有类似的东西:
- /
- /关于(“通用”)
- /翻译(区域)
在翻译区域内,我有:
- /Translate/Word(WordController,索引操作)
- /Translate/Word/Add(WordController,添加操作)
- /Translate/Word/Improve(WordController,改进操作)
所有这些工作。
但是,只要我在现有结构中添加另一个控制器,例如。定义 ...
- /翻译/定义(定义控制器,索引操作)
- /翻译/定义/添加(定义控制器,添加操作)
或发音...
- /翻译/发音(PronunciationController,索引操作)
- /翻译/发音/添加(PronunciationController,添加操作)
我得到的只是一个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}",
new { action = "Index", controller="Default", id = UrlParameter.Optional, section=UrlParameter.Optional }
);
}
我已经安装了Phil Haack 的 RouteDebugger并得到了以下结果:
所以它似乎与控制器和动作匹配,但我只得到一个 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...而现在它可以工作了。
所以不是一个解决方案,一个解决方法,尽管环顾四周,我仍然不知道为什么。