【问题标题】:LinkGenerator.GetUriByAction not following the custom routeLinkGenerator.GetUriByAction 不遵循自定义路线
【发布时间】:2021-08-13 13:55:02
【问题描述】:

那是控制器:

[ApiController]
[Route("api/[controller]")
public class MarketController : ControllerBase
{
  [HttpGet("{id}/picture")
  public async Task<IActionResult> GetPictureAsync(Guid id)
  {
    ...
  }
}

我正在使用 LinkGenerator 从 GetPictureAsync 创建一个绝对 URI。并设置 Startup 类启动 HttpContextAccessor 为 DI。

// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
  ...
  services.AddHttpContextAccessor();
  ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  ...
  app.UseEndpoints(endpoints =>
  {
    endpoints.MapControllers();
    endpoints.MapDefaultControllerRoute();
  });
}

在我的自定义类中,我使用这种方式:

public class CustomClass
{
  private readonly IHttpContextAccessor _httpContextAccessor;
  private readonly LinkGenerator _linkGenerator;

  public CustomClass(IHttpContextAccessor httpContextAccessor,
    LinkGenerator linkGenerator)
  {
    _httpContextAccessor = httpContextAccessor;
    _linkGenerator = linkGenerator;
  }

  public void SomeMethod()
  {
    var uri = _linkGenerator.GetUriByAction(_httpContextAccessor.HttpContext, "GetPicture", "Markets", new { id = id });
  }

}

问题是因为 LinkGenerator 没有遵循我在 GetPicture 方法中设置的自定义路由示例。

LinkGenerator 生成以下值:

https://localhost:5051/Markets/GetPicture/00748d23-afa7-4efb-b67b-77f68fdc44d5

但它应该生成:

https://localhost:5051/api/Markets/00748d23-afa7-4efb-b67b-77f68fdc44d5/picture

【问题讨论】:

    标签: api asp.net-core controller


    【解决方案1】:

    原因是您在SomeMethod 中使用了错误的控制器名称。按照您提供的步骤,我重现了您的问题。

    你应该使用Market,而不是Markets

    因为您的控制器名称是MarketController

    经过测试,对我有用。

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2013-02-26
      • 2012-02-28
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2023-03-11
      • 2015-04-21
      • 1970-01-01
      相关资源
      最近更新 更多