Razor asp路由未生成预期的url

Razor asp路由未生成预期的url,razor,asp.net-core-mvc,asp.net-core-mvc-2.0,Razor,Asp.net Core Mvc,Asp.net Core Mvc 2.0,当我使用asp路由标记时,它不会返回准确的url。都不是Url.RouteUrl。它们返回主url。但是使用asp控制器和asp操作,返回预期的url <a asp-route="Voucher_getPrice" data-ng-href="@Url.RouteUrl("Voucher_getPrice", new { productId = 5})" asp-route-productId="5"></a> asp路由不应与asp控制器和asp操作一起使用。换句话说

当我使用asp路由标记时,它不会返回准确的url。都不是Url.RouteUrl。它们返回主url。但是使用asp控制器和asp操作,返回预期的url

<a asp-route="Voucher_getPrice" data-ng-href="@Url.RouteUrl("Voucher_getPrice", new { productId = 5})" asp-route-productId="5"></a>

asp路由
不应与
asp控制器
asp操作
一起使用。换句话说,您不能在
MapRoute()
上以这种方式设置模板。相反,您必须在模板中指定控制器和操作名称

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "voucher_getPrice",

        // You don't need :required filter. If you don't put ? there,
        // it's required.
        template: "voucher/getPrice/{productId}"
    );

    routes.MapRoute(
        name: "default",
        template: "{controller=home}/{action=index}/{id?}");
});

它不起作用。当我访问链接时,它返回404代码。但是使用这个模板:
{controller=concedure}/{action=GetPrice}/{productId}
操作代码是
public-IActionResult-GetPrice(int-productId)
。控制器类名是:
VoucherController
我假设您在“凭证\u getPrice”之后配置了默认路由。无论如何,请查看我的更新。这正是我配置路由的方式。但是我的默认路线没有
id
参数。这就是为什么当我访问链接
/凭证/getPrice
时会起作用,但不使用参数。当我删除默认路由时,链接
/concreate/getPrice
返回404。因此路由
模板:“凭证/getPrice/{productId}”
无效。您刚才说明了它不起作用的原因。您需要有默认路由,以便路由
凭证/getPrice/{productId}
调用正确的控制器和操作。或者,如果您希望所有像'xx/xxx/这样的请求都调用凭证控制器GetPrice操作,那么您可以使用
{controller=Voucher}/{action=GetPrice}/{productId}
。这就是问题所在。我的默认路线没有任何参数。它匹配任何没有参数的路由。但在
凭证/getPrice/{productId}
的情况下,我的路线与参数不匹配。我想删除默认路由,使其仅与symfony PHP中的
/
匹配。在symfony PHP中,如果我说路由必须有一个参数,那么匹配
/
的默认路由将不会调用控制器操作,如果链接是
/hello
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "voucher_getPrice",

        // You don't need :required filter. If you don't put ? there,
        // it's required.
        template: "voucher/getPrice/{productId}"
    );

    routes.MapRoute(
        name: "default",
        template: "{controller=home}/{action=index}/{id?}");
});