我是MVC编码的新手,现在已经在这个问题上工作了几天。我在设置多个路由方案时遇到问题,并让它们按预期工作。这就是我所拥有的。
框架
模型
我想要做的是能够有两种不同的路由方案
所以这就是我如何构建文档中的标签
对于Products / Edit / Id
< asp-controller =“Products”asp-action =“Edit”asp-route-id =“@ item.Id”> Edit< / A>
对于Products / Info / CategoryName
< asp-controller =“Products”asp-action =“Info”asp-route-category =“@ item.CategoryName”> @ item.CategoryName< / A>
所以事实是,这实际上会起作用,但是我的Products / Info / CategoryName的超链接被呈现为查询字符串而不是更友好的用户版本,例如一个类别是“Fireplaces”,所以我的链接for Info成为
Products/Info?category=Fireplaces
而不是我想要的
Products/Info/Fireplaces
如何配置路由以使Controller / Action / Parameter调用同时适用?我已经尝试将特定路由添加到app.UseMvc(),并且它们再次在功能上工作,但Info链接仍然呈现为查询字符串。
答案 0 :(得分:0)
好的,终于到了底部。使用app.UseMvc(),我可以使用Controller类中的新DataAnnotations定义路径,而不是尝试使用旧方法定义路由,从而创建了我想要的用户友好链接,而不是查询字符串链接。所以对于我的控制器类中的Info()方法,我改为看起来像
[HttpGet]
[ActionName("Info")]
[Route("Products/Info/{category}")]
public IActionResult Info(string category)
{
.....
return View(productCategory);
}