如何在Asp.Net Core 3.1中移除Home控制器URL中的/Home路径?
解决Asp.Net Core 3.1中Home控制器URL无需加/Home的问题
我来帮你搞定这个问题!你之前用[Route("/")]没达到预期效果,是因为这个特性只把**根路径(/)**映射到Home控制器的默认Action(Index),但其他Action比如About还是得通过/Home/About访问——因为没有对应的路由规则覆盖这个场景。
下面给你两种实用的解决方案,按需选择:
方法一:修改全局路由配置(无需改动控制器代码)
直接在Startup.cs(或Program.cs,依项目结构而定)的端点配置里,先添加一条针对Home控制器的专属路由,优先级要高于默认路由:
app.UseEndpoints(endpoints => { // 优先匹配Home控制器的请求,无需加/Home前缀 endpoints.MapControllerRoute( name: "home", pattern: "{action=Index}/{id?}", defaults: new { controller = "Home" } ); // 保留默认路由,供其他控制器使用 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}" ); endpoints.MapRazorPages(); });
这样配置后:
- 访问
/会直接到Home/Index - 访问
/About会直接到Home/About - 其他控制器(比如
BlogController)的请求依然用/Blog/List这种格式访问,互不干扰
方法二:给Home控制器添加特性路由(改动控制器代码)
如果你更倾向于用特性路由来精细化控制,可以给Home控制器加上全局路由特性:
[Route("{action=Index}/{id?}")] public class HomeController : Controller { public IActionResult Index() { return View(); } public IActionResult About() { return View(); } // 要是某个Action需要自定义路径,还能单独加特性,比如: [Route("my-custom-page")] public IActionResult CustomPage() { return View(); } }
这个特性的作用是:让Home控制器的所有Action默认使用/ActionName的路径访问,同时设置了默认Action为Index,所以根路径/也会直接指向Index方法。而且特性路由的优先级高于全局常规路由,不会和默认路由冲突。
内容的提问来源于stack exchange,提问作者u936293
相关产品推荐
相关产品推荐

