在Visual Studio 2017社区(或任何版本)中打开一个新的ASP.NET Web API项目并运行它,您将看到带有 API 超链接的欢迎页面。
单击超链接,它将带您到URL http://localhost:<port>/Help
。
这是Index
区域中HelpController
上的HelpPage
操作。
但是,我感到困惑的是以下内容:
HelpPage
区域没有区域注册。
此ActionLink
呼叫完全错误。它说:“请在默认的无区域区域内对Index
调用HelpController
操作。”
在项目根目录中的_Layout.cshtml中
<li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li>
That's outright abusive. How does that work?
localhost:<port>/HelpPage/Help/[optional:Index]
?该区域的路线配置在哪里?如果不存在,则路由应该采用在根无区域区域中声明的唯一默认路由,对吧?答案 0 :(得分:1)
有一个Areas\HelpPage\HelpPageAreaRegistration.cs
文件负责区域注册,如下所示。
(我正在使用Visual Studio 2017 Enterprise版。)
请注意,HelpPageAreaRegistration
类注册的路由Help/{action}/{apiId}
使用的常量网址模板部分Help
与区域HelpPage
的名称不匹配。
(按照惯例,这条路线应该是HelpPage/{controller}/{action}/{id}
。)
这样做,您不必(也不必)在@html.ActionLink
中指定区域名称,因为此控制器具有“显式”路由,可以避免与其他路由(包括来自默认区域。
必须从AreaRegistration
内部而不是RouteConfig
中配置此路由,以便从HelpPage
区域内的相应视图文件夹中解析视图。
public class HelpPageAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{ return "HelpPage"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"HelpPage_Default",
"Help/{action}/{apiId}",
new { controller = "Help", action = "Index", apiId = UrlParameter.Optional });
HelpPageConfig.Register(GlobalConfiguration.Configuration);
}
}