【问题标题】:In ASP.NET Core, is it possible to generate a URI in the controller for a Get action that takes two parameters? If so how?在 ASP.NET Core 中,是否可以在控制器中为带有两个参数的 Get 操作生成 URI?如果有怎么办?
【发布时间】:2022-01-26 01:42:02
【问题描述】:

我有一个名为 ConnectionManagerCategoriesController 的关联控制器。它有两个 Get 方法。一种获取 ConnectionManager 的所有类别,另一种仅根据名称检索 ConnectionManager 的一个类别。我有一个帖子来创建一个新类别,我正在尝试为 LinkGenerator 生成一个 uri。但是,在创建 URI 时,它使用 GetConnectionManagerCategories 方法而不是 GetConnectionManagerCategory。我不知道为什么或如何做不同的事情。:

[Route("api/connectionmanagers/{connectionManagerID:int}/categories")]
[ApiController]
public class ConnectionManagerCategoriesController : ControllerBase
{
    private readonly LinkGenerator _linkGenerator;

    [HttpGet]
    public async Task<ActionResult<IEnumerable<ConnectionManagerModel>>> GetConnectionManagerCategoriesAsync(int connectionManagerID){}

    [HttpGet("{categoryName}", Name = "GetConnectionManagerCategoryAsync")]
    public async Task<ActionResult<ConnectionCategoryModel>> GetConnectionManagerCategoryAsync(int connectionManagerID, string categoryName){}

    [HttpPost]
    public async Task<ActionResult<ConnectionCategoryModel>> AddConnectionCategoryAsync(int connectionManagerID, string categoryName, [FromHeader(Name = "x-requestid")] string requestId)
    {
        var url = _linkGenerator.GetUriByRouteValues(HttpContext,
                                                                "GetConnectionManagerCategoryAsync",
                                                                values: new { connectionManagerID, categoryName = commandResult.CategoryName });

        return Created(url, commandResult);
    }

它将以下 uri 返回给 Swagger:'http://localhost:6704/api/connectionmanagers/1/categories?categoryName=Almost'

但是,当我在代码中记录 uri 时,它是:http://localhost:6704/api/connectionmanagers/1/categories/newvalueadded

这可能吗?

【问题讨论】:

    标签: asp.net-core asp.net-web-api


    【解决方案1】:

    您必须展示如何尝试运行该操作,以获得一些解释。路由非常棘手,最好不要尝试按照您创建的方式创建路由。

    恕我直言,定义整个路线总是一个好主意,而不仅仅是部分。特别是如果你使用 Swager

    [HttpGet("{~/api/connectionmanagers/{connectionManagerID:int}/categories/{categoryName}")]
     public async Task<ActionResult<ConnectionCategoryModel>> GetConnectionManagerCategoryAsync(int connectionManagerID, string categoryName){}
    

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2013-12-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多