Asp.net core mvc asp.net mvc core 3.1基于区域的路由
我想在我的项目中包括基于区域的布线。我尝试了一些东西,但似乎没有什么意义 我在Startup.cs中有一个站点区域和以下路由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",
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();
}
}