ASP.NET MVC中如何通过asp-controller、asp-action访问URL多层路径
解决方案
你遇到的斜杠被编码的问题,本质是asp-controller属性仅用于填写控制器名(不含Controller后缀),不支持传入路径片段,框架会把该属性的全部内容当作普通字符串做URL编码,所以/会被转成%2F。
场景1:Food控制器放在Controllers/Products子目录下
给Food控制器类添加路由特性指定前缀即可:
using Microsoft.AspNetCore.Mvc; // 加路由特性指定访问前缀 [Route("Products/Food")] public class FoodController : Controller { public IActionResult Index() { return View(); } }
对应的标签助手写法就可以简化为:
<li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Food" asp-action="Index">Food</a> </li>
生成的URL就是你需要的/Products/Food/Index。
场景2:Products是你定义的Area(区域)
直接通过asp-area属性指定区域名即可,不用给控制器加额外特性:
<li class="nav-item"> <a class="nav-link text-dark" asp-area="Products" asp-controller="Food" asp-action="Index">Food</a> </li>
临时快速解决
如果你不想改控制器配置,也可以直接用href属性写死路径,不需要用asp-controller相关属性:
<li class="nav-item"> <a class="nav-link text-dark" href="/Products/Food/Index">Food</a> </li>
内容的提问来源于stack exchange,提问作者KaasGierInFrankrijk
相关产品推荐
相关产品推荐

