ASP.NET Web API项目模板如何使用此HelpPage区域,而不是该区域?

时间:2018-11-28 11:07:02

标签: asp.net-mvc asp.net-web-api asp.net-mvc-areas

在Visual Studio 2017社区(或任何版本)中打开一个新的ASP.NET Web API项目并运行它,您将看到带有 API 超链接的欢迎页面。

单击超链接,它将带您到URL http://localhost:<port>/Help

这是Index区域中HelpController上的HelpPage操作。

但是,我感到困惑的是以下内容:

  1. HelpPage区域没有区域注册。

  2. ActionLink呼叫完全错误。它说:“请在默认的无区域区域内对Index调用HelpController操作。”

在项目根目录中的_Layout.cshtml中

<li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li>

That's outright abusive. How does that work?
  1. 等等,此操作的默认路由是否应为localhost:<port>/HelpPage/Help/[optional:Index]?该区域的路线配置在哪里?如果不存在,则路由应该采用在根无区域区域中声明的唯一默认路由,对吧?

1 个答案:

答案 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);
    }
}