【问题标题】:Adding Attribute Route on Controller adds Parameter to Url在控制器上添加属性路由将参数添加到 Url
【发布时间】:2020-06-18 21:41:23
【问题描述】:

我想更改将访问我的控制器的 URL,但是当我这样做时,我得到的是 controller/action?id=,而不是 controller/action/id >(ID 号)在 URL 中。

我在我的 MVC .Net Core 中使用默认路由。

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

在我的控制器上,我有 [Route("DifferentName/{action=index}")] 用于属性路由。

我已经尝试添加[Route("DifferentName/{action=index}/{id?}")]

但我得到一个异常“RoutePatternException:路由参数名称'id'在路由模板中出现多次。”

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    根据文档,这些属性不正确:

    [Route("DifferentName/{action=index}/{id?}")]

    [Route("DifferentName/{action=index}")]

    当我们只想更改 URL 的一部分时,控制器应该是这样的:

    [Route("DifferentName/[action]")] [行动]

    当 asp .net core 解析 URL 时,[action] 将替换为您的操作名称。

    有关路由的更多信息,可以在documentation中找到

    【讨论】:

    • 我尝试了[Route("DifferentName/[action]")],但仍然在 URL 中获得 ?id=。此外,如果我尝试导航到 DifferentName/Action/5,我会得到 404。我必须输入 DifferentName/Action?id=5。
    • 我还在我的索引操作中添加了[Route("")] [Route("Index")]。我可以访问它的唯一方法是通过不同的名称/索引。不同的名称本身会抛出 404。根据文档,它应该可以工作。我错过了什么吗??
    • 我的控制器也继承了一个基本控制器。我很确定这会影响路由。打算做更多的研究。
    【解决方案2】:

    但我得到一个异常“RoutePatternException:路由参数 name 'id' 在路由模板中出现了不止一次。”

    我已经重现了您的错误。我需要与您确认您的错误原因是否是在both controller and action 中添加了Route 属性。

    如果是这样,正如异常指出的那样,您不需要重复指定路线。

    修改如下设置实现'Differentname/action/5'这样的url:

        [Route("DifferentName/{action=index}")]
        public class ShowPdfController : Controller
        {
           
            public IActionResult Index()
            {
                return View();
            }
    
            [Route("{id?}")]
            public IActionResult Action(int id)
            {
                return View();
            }
       }
    

    然后,就可以看到这个设置的测试结果了:

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 2018-06-16
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2016-01-18
      相关资源
      最近更新 更多