Asp.net core 在控制器上添加属性路由会将参数添加到Url

Asp.net core 在控制器上添加属性路由会将参数添加到Url,asp.net-core,Asp.net Core,我想更改将访问我的控制器的URL,但当我更改时,我在URL中得到的不是控制器/action/id,而是控制器/action?id=(id号) 我在MVC.Net内核中使用默认路由 app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Hom

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

我在MVC.Net内核中使用默认路由

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
在我的控制器上,我有用于属性路由的
[Route(“DifferentName/{action=index}”)]

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


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

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

[路由(“差异名称/{action=index}/{id?}”)]

[路由(“差异名称/{action=index}”)]

这是当我们只想更改其URL部分时控制器的外观:

[路由(“差异名称/[操作]”)]
[行动]

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


有关布线和布线的详细信息,请参见

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

[路由(“差异名称/{action=index}/{id?}”)]

[路由(“差异名称/{action=index}”)]

这是当我们只想更改其URL部分时控制器的外观:

[路由(“差异名称/[操作]”)]
[行动]

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

有关路由和的更多信息,请参见

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

我重复了你的错误。我需要与您确认错误的原因是否是将路由属性添加到控制器和操作中

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

修改以下设置以实现url,如
'Differentname/action/5'

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

        [Route("{id?}")]
        public IActionResult Action(int id)
        {
            return View();
        }
   }
然后,您可以看到此设置的测试结果:

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

我重复了你的错误。我需要与您确认错误的原因是否是将路由属性添加到控制器和操作中

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

修改以下设置以实现url,如
'Differentname/action/5'

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

        [Route("{id?}")]
        public IActionResult Action(int id)
        {
            return View();
        }
   }
然后,您可以看到此设置的测试结果:


我尝试了
[Route(“differentitname/[action]”]
,但仍然在URL中获得了?id=。此外,如果我尝试导航到不同的name/Action/5,我会得到404。我必须输入不同的名称/操作?id=5。我还向索引操作添加了
[Route(“”][Route(“Index”)]]
。我只能通过不同的名称/索引来访问它。按其自身的不同名称抛出404。根据文件,它应该是有效的。我是否遗漏了什么??我的控制器还继承了一个基本控制器。我很确定这会影响路线。我将做更多的研究。我已经尝试了
[Route(“differentitname/[action]”)]
,但仍然在URL中获得了?id=。此外,如果我尝试导航到不同的name/Action/5,我会得到404。我必须输入不同的名称/操作?id=5。我还向索引操作添加了
[Route(“”][Route(“Index”)]]
。我只能通过不同的名称/索引来访问它。按其自身的不同名称抛出404。根据文件,它应该是有效的。我是否遗漏了什么??我的控制器还继承了一个基本控制器。我很确定这会影响路线。我打算做更多的研究。