Asp.net core mvc asp.net mvc core 3.1基于区域的路由

Asp.net core mvc asp.net mvc core 3.1基于区域的路由,asp.net-core-mvc,asp.net-core-3.1,Asp.net Core Mvc,Asp.net Core 3.1,我想在我的项目中包括基于区域的布线。我尝试了一些东西,但似乎没有什么意义 我在Startup.cs中有一个站点区域和以下路由 app.UseEndpoints(endpoints => { endpoints.MapAreaControllerRoute( name: "Sites", areaName: "Sites",

我想在我的项目中包括基于区域的布线。我尝试了一些东西,但似乎没有什么意义

我在Startup.cs中有一个站点区域和以下路由

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapAreaControllerRoute(
                name: "Sites",
                areaName: "Sites",
                pattern: "Sites/{controller=Home}/{action=Index}/{id?}");


            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
当尝试访问以下url(如图中所示的项目设置)时,我将被定向到Home/Index,这是该区域外的默认映射

但是,如果我创建了一个链接,那么默认主控制器就是这样

<a asp-action="Create" asp-controller="Home" asp-area="Sites">Create</a>
我想下面的url将根据url重定向到区域控制器站点。我错过什么了吗

https://localhost:44379/Sites/Home/Index 
目录结构在这里表示

该问题与应用程序URL和SSL URL(在应用程序属性的“调试”面板中)有关,当使用锚定标记帮助器生成URL时,它会将URL附加到应用程序URL的末尾,因此会导致此行为

要解决此问题,请将应用程序URL从
https://localhost:44379/Sites/Home/Index/
https://localhost:44379/

在Properties文件夹中,打开
launchSettings.json
文件,更改内容如下:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:64670",
      "sslPort": 44307
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}
根据您的代码,我尝试使用以下代码在站点区域添加HomeController:

[Area("sites")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    public IActionResult About()
    {
        return View();
    }
}
然后,使用以下代码添加超链接:

<a class="nav-link text-dark" asp-area="Sites" asp-controller="Home" asp-action="Index">Sites Index</a>
<br />
<a class="nav-link text-dark" asp-area="Sites" asp-controller="Home" asp-action="About">Sites Home About</a>
<br /> 
<a href="/Sites/Home/index">Sites Index</a>
[注意]无需在应用程序属性中设置启动浏览器、应用程序URL或启用SSL URL

结果如下:在这个示例中,默认页面是about页面,它不包含令人困惑的URL


我尝试了这个,第一个问题,我误解了应用程序Url。应用程序Url=基本Url。。这是您正确突出显示的内容。如何将Area->Controller->Action设置为在development machine中运行应用程序时提供的页面。我尝试了你的例子,然后将Sites/Home/Create放在LaunchBrowser中,但默认的主页仍然是一开始就提供服务的主页up@user1131926,是的,如果输入
https://localhost:44307/Sites/Home/Index
或启动浏览器中的
站点/Home/Index
,当我们使用锚定标记和
asp-*
添加链接时,重定向后,它也会生成一个类似
https://localhost:44307/Sites/Home/Index/sites/home/create
。但是,如果我们使用
设置锚定标记,则URL是正确的。因此,要生成正确的url,您可以清除LaunchBrowser或设置锚定标记的href属性。正确,但我需要做什么更改才能将sites/home/create作为启动url?Hi@user1131926,请在回复中查看我的更新。要将areas页面设置为起始页面,可以在areas页面的action方法中使用[Route]属性。不需要在应用程序属性中设置启动浏览器、应用程序URL或启用SSL URL。我尝试了这些,但似乎不起作用,我仍然将默认页面作为启动页面。必须有一个简单的方法来更改启动页面。
<a class="nav-link text-dark" asp-area="Sites" asp-controller="Home" asp-action="Index">Sites Index</a>
<br />
<a class="nav-link text-dark" asp-area="Sites" asp-controller="Home" asp-action="About">Sites Home About</a>
<br /> 
<a href="/Sites/Home/index">Sites Index</a>
[Area("Sites")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    [Route("")]
    [Route("Sites/Home/About")]
    public IActionResult About()
    {
        return View();
    }
}