区域在 .net 核心中显示为查询字符串

Posted

技术标签:

【中文标题】区域在 .net 核心中显示为查询字符串【英文标题】:Area appears as querystring in .netcore 【发布时间】:2021-08-27 00:10:13 【问题描述】:

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

Startup.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?");
);

Areas/Admin/Controllers/BaseController.cs

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

Areas/Admin/Controllers/HomeController.cs

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

Areas/Admin/Controllers/CompanyController.cs

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

Areas/Admin/_Layout.cshtml

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

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

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

【问题讨论】:

【参考方案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?");
   
);

否则会匹配第一个路径。

【讨论】:

对!非常感谢@Yinqiu

以上是关于区域在 .net 核心中显示为查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

.net核心路由到基于当前域名的剃须刀页面区域?

Asp.net core MVC post 参数始终为空

ASP.NET 核心 CORS 标头未显示

如何在 ASP .Net 核心的 Swagger 中添加基本授权标头

MVC和同一项目.net核心中的剃刀页面区域

如何在 LINQ 查询中使用自定义方法