Как шаблон проекта ASP.NET Web API использует эту область HelpPage, как будто она не была областью?
Откройте новый проект ASP.NET Web API в сообществе Visual Studio 2017 (или любой другой редакции) и запустите его, и вы увидите страницу приветствия с гиперссылкой 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]
? Где конфигурация маршрута для этой области? Если он отсутствует, маршрутизация должна идти по единственному маршруту по умолчанию, объявленному в корневой области без области, верно?
1 ответ
Есть Areas\HelpPage\HelpPageAreaRegistration.cs
file taking care of the area registrations, shown below.
(I'am using Visual Studio 2017 Enterprise edition.)
Обратите внимание, что HelpPageAreaRegistration
class registers the route Help/{action}/{apiId}
that uses a constant url-template part Help
which doesn't match with the name of the area HelpPage
,
(By convention, this route would have been HelpPage/{controller}/{action}/{id}
.)
Doing so, you don't have to (and must not) specify the area name in the @html.ActionLink
, as this controller has an 'explicit' route, which avoids conflicts with other routes, including those from the default area.
This route must be configured from within the AreaRegistration
и не в RouteConfig
in order for the views to be resolved from the appropriate views folder within this 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);
}
}