routes - ASP.NET Core 3.1 MVC:路由不适用于区域
问题描述
我有 2 个问题,但它们都与一个关键概念有关:我需要向 Routing 添加什么来处理区域内的页面?
Admin
我在我的 ASP.NET Core 3.0 MVC 应用程序中创建了一个区域。我希望能够访问这样的页面:a) /Admin/ ...to show the Index page b) /Admin/aa ... show the view "aa" c) /Admin/bb ... show the view "bb"
浏览器只返回一个空白页面。日志中没有显示错误或异常。我怀疑路由不正确。
我确实在
Admin
该区域内添加了一个新的脚手架项目(上述问题 1 中所述),并为Company
. 选择模型和其他细节后,VS2019 脚手架生成了控制器和相应的视图(创建、删除、详细信息、编辑、索引)。但是我需要添加什么路由代码来容纳新生成的 URLCompany
?
下面是 Startup.cs 中的路由代码:
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
name: "AdminArea",
areaName: "Admin",
pattern: "Admin/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
这是文件夹中的控制器\Areas\Admin\Controllers
:
namespace MyWebSite.Areas.Admin.Controllers
{
[Area("Admin")]
public class AdminController : Controller
{
private readonly ILogger _logger;
public AdminController(ILogger<AdminController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("GET: Admin/Index/");
return View();
}
public IActionResult aa()
{
_logger.LogInformation("GET: Admin/aa/");
return View();
}
public IActionResult bb()
{
_logger.LogInformation("GET: Admin/bb/");
return View();
}
}
}
解决方案
作为您的 startup.cs 中的模式设置:
模式:“管理员/{controller=Home}/{action=Index}/{id?}”);
这意味着您的路由 muststart with Admin(area name)
后跟控制器名称和操作名称。
你当前 Admin 区域的控制器名称也是 Admin,所以如果你想看到对应的页面,你应该输入链接:
http://localhost:xxxx/Admin/Admin/
http://localhost:xxxx/Admin/Admin/aa
http://localhost:xxxx/Admin/Admin/bb
如果你想遵循你的理想路线,你需要这样设置:
endpoints.MapAreaControllerRoute (
name: "AdminArea",
areaName: "Admin",
pattern: "{controller=Home}/{action=Index}/{id?}");
但这ignore your Area name
只会显示http://localhost:xxxx/Controller/Action
。
如果您HomeController
在 Admin 区域下创建另一个控制器,您的路径将变为:http://localhost:xxxx/Home/
这是测试结果:
推荐阅读
- android - WorkManager 只需要在特定时间间隔之间工作,如何使用 WorkManager 约束?工作经理示例
- memory - 如何在 K 框架中为类似于 ada-spark 的语言编写语义
- python - 如何为预训练的 Glove 词嵌入处理看不见的词以避免 keyerror?
- php - 在 cron 中出现错误:要求:找不到命令
- mysql - 如何计算与 MySQL 中另一列中特定行关联的唯一值?
- swift - 为什么blob插入失败?
- apache-kafka - 将 IBM MQ 与 Kafka 进行比较
- lua - 尝试索引 upvalue 'player'(一个 nil 值)
- angular - 想将数据从角度发送到spring boot api
- java - 将 Java 添加到 NGINX Docker 或将 NGINX 添加到 Alpine 上的 Java Docker?