gpt4 book ai didi

c# - .Net Core 2.2 Web API 路由

转载 作者:行者123 更新时间:2023-11-30 19:01:04 25 4
gpt4 key购买 nike

我有以下 Controller ,我想将其用作 ajax 帖子的 Web API Controller ,以从我的用户表中检索数据。

namespace MyProjectName.Controllers.API
{
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly myContext _context;
public UsersController(myContext context)
{
_context = context;
}

[HttpGet]
public List<string> GetInstitutionNamesById(int id)
{
// returns desired list
}
}
}

现在我希望这个函数的路由是这样的:/api/users/getinstitutionnamesbyid 但显然它似乎只是 /api/users 这我发现真的很困惑(如果我添加额外的 HttpGet 函数会怎样?)。

谁能解释我做错了什么?我使用的 Web Api Controller 不是预期的方式吗?我的路由有误吗?

提前致谢。

最佳答案

[Route("api/[controller]")]

使用此模板,您可以明确声明您只关心 Controller 的名称。在您的示例中,GetInstitutionNamesById操作 的名称,模板未考虑它。

有几个选项可以实现您在这里的要求:

  1. 更改您的 [Route] 模板以包含操作名称:

    [Route("api/[controller]/[action]")]

    此选项适用于您 Controller 中的所有操作。

  2. 更改 HttpGet 约束属性以隐式指定操作:

    [HttpGet("[action]")]

    此选项确保您的操作方法的名称将始终用作路由段。

  3. 更改 HttpGet 约束属性以显式指定操作:

    [HttpGet("GetInstitutionNamesById")]

    此选项允许您使用不同于操作方法本身名称的路由段。

就您在这里是否以正确的方式使用路由而言 - 这在某种程度上是基于意见的。通常,您会看到 API 试图成为 RESTful,使用与资源匹配的路由模板等。使用这种方法,您可能会得到更类似于以下内容的东西:

/api/Users/{userId}/InstitutionNames

在这种情况下,您可能有一个单独的 InstitutionNames Controller ,或者您可能将其捆绑到 Users Controller 中。确实有很多方法可以做到这一点,但我不会在这里进一步讨论,因为它有点离题和基于观点。

关于c# - .Net Core 2.2 Web API 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55178217/

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