gpt4 book ai didi

c# - ASP.NET 属性路由和默认路由可以一起工作吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:19 24 4
gpt4 key购买 nike

我有一个用 NET Core 2.1 编写的项目,其中我有一堆带有属性路由的 Controller /操作。像这样的东西:

[Route("~/test")]
public class ProductsController : Controller
{
[HttpGet("{id:int}")]
public IActionResult ById(int id)
{
...
}
}

在 Startup 上我只是默认:

app.UseMvc(routeBuilder =>
{
routeBuilder.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});

所以,应用程序正在按预期解析 /test/42,但是没有办法让 /products/byid?id=42 工作...如果我只需注释掉默认路由发生的 Controller 的属性即可。

有没有办法让他们一起工作?

最佳答案

简而言之:将其更改为 [Route("/products")] 并重试。

详细说明:

如果您将 RouteAttribute 应用于 Controller 或操作方法,则该 Controller /操作方法将仅响应指定的路由。在您给出的那个特定示例中,它只会在您浏览到 /~test/65 时执行。

如果您希望 Controller /操作方法默认使用名称,请尝试使用 [controller][action] 标志,如下所示:

[Route("[controller]")]
public class ProductsController : Controller
{
[HttpGet("[action]/{id:int}")] // /Products/ById/5
public IActionResult ById(int id)
{
...
}
}

您在 ASP.NET Core 中的默认路由是如果没有 Controller 命中您指定的路由,MVC 将回退到的路由。在那种情况下,/Products/ById/5 也会起作用。

默认情况下,它映射到 Home Controller 和 Index 操作方法,这是您的默认主页。如果路由只是 / 则将执行该操作。

您也可以直接指定您想要的路线

[Route("/api/products")]
public class ProductsController : Controller
{
[HttpGet("by-id/{id:int}")] // /api/products/by-id/5
public IActionResult ById(int id)
{
...
}
}

你也可以试试小乔试过的建议,也是一种方法。但最后你可以微调你的路线,如果你愿意,可以在一个 Controller 或 Action 上有多个路线。自己尝试和试验,但请查看文档以获取更多信息。

您很可能不想修改默认路由,而是根据自己的喜好调整 RouteAttribute。了解 attribute routingrouting to controller actions using app.UseMvc()在我提供的链接中。

关于c# - ASP.NET 属性路由和默认路由可以一起工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com