Asp.net mvc ASP.NET Web API项目模板如何使用此帮助页区域,就像它不是';这不是一个区域吗?

Asp.net mvc ASP.NET Web API项目模板如何使用此帮助页区域,就像它不是';这不是一个区域吗?,asp.net-mvc,asp.net-web-api,asp.net-mvc-areas,Asp.net Mvc,Asp.net Web Api,Asp.net Mvc Areas,在Visual Studio 2017社区(或任何版本)中打开一个新的ASP.NET Web API项目并运行它,您将看到一个带有API超链接的欢迎页面 单击超链接,它会将您带到urlhttp://localhost:/Help 这是帮助页面区域中帮助控制器上的索引操作 public class HelpPageAreaRegistration : AreaRegistration { public override string AreaName { get{

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

单击超链接,它会将您带到url
http://localhost:/Help

这是
帮助页面
区域中
帮助控制器
上的
索引
操作

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);
    }
}
然而,我感到困惑的是:

  • 帮助页
    区域没有区域注册

  • 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);
        }
    }
    
  • 这个
    ActionLink
    调用完全错误。它说,“请在默认的无区域内调用
    帮助控制器
    上的
    索引
    操作。”

  • 来自项目根目录中的_Layout.cshtml

    <li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li>
    
    That's outright abusive. How does that work?
    
  • @Html.ActionLink(“API”、“索引”、“帮助”,新建{area=”“},空)
  • 那完全是辱骂。这是怎么回事?
  • 等等,此操作的默认路由不应该是
    localhost:/HelpPage/Help/[optional:Index]
    ?这个区域的路线配置在哪里?如果没有,路由应该按照根目录中声明的唯一默认路由,area less area,对吗

  • 有一个
    Areas\HelpPage\HelpPageAreaRegistration.cs
    文件负责区域注册,如下所示。
    (我正在使用Visual Studio 2017企业版。)

    请注意,
    HelpPageAreaRegistration
    类注册路由
    Help/{action}/{apid}
    ,该路由使用与区域名称不匹配的常量url模板部分
    Help

    (按照惯例,此路由应该是
    HelpPage/{controller}/{action}/{id}

    这样,您就不必(也不能)在
    @html.ActionLink
    中指定区域名称,因为此控制器有一个“显式”路由,可以避免与其他路由(包括来自默认区域的路由)发生冲突。
    必须在
    区域注册
    中配置此路由,而不是在
    路由图
    中配置此路由,以便在此
    帮助页
    区域内的相应视图文件夹中解析视图

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

    该死我怎么会错过那一刻。