首页 > 解决方案 > 区域在 .netcore 中显示为查询字符串

问题描述

在 asp.net core 中,我为Admin模块定义了区域,并为 url 映射进行了必要的配置,如下所示。但是,该区域在链接上显示为查询字符串。这究竟是什么原因?尽管我在 中尝试了许多不同的模式MapControllerRoute,但问题并没有消失。

启动.cs

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(name: "areas", pattern: "{area}/{controller=Home}/{action=Index}/{id?}");
});

区域/管理员/控制器/BaseController.cs

[Area("Admin")]
public abstract class BaseController<T> : Controller where T : BaseController<T>

区域/管理员/控制器/HomeController.cs

[Area("Admin")]
public class HomeController : Controller{}

区域/管理员/控制器/CompanyController.cs

[Area("Admin")]
public class CompanyController : BaseController<CompanyController>

区域/管理员/_Layout.cshtml

<a asp-area="Admin" asp-controller="Company" asp-action="CompanyIndex">Company</a>

正如我所提到的,该区域显示为查询字符串。

http://localhost:49256/Company/CompanyIndex?area=Admin

标签: c#asp.net-core.net-coreasp.net-core-mvcasp.net-core-3.1

解决方案


你需要制定路线

 endpoints.MapControllerRoute(name: "areas", pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

多于

endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");

像:

app.UseEndpoints(endpoints =>
{
     endpoints.MapControllerRoute(name: "areas", pattern: "{area}/{controller=Home}/{action=Index}/{id?}");
     endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
   
});

否则它将匹配第一个路径。


推荐阅读