LinkGenerator.GetUriByAction 不遵循自定义路线
LinkGenerator.GetUriByAction not following the custom route
那是控制器:
[ApiController]
[Route("api/[controller]")
public class MarketController : ControllerBase
{
[HttpGet("{id}/picture")
public async Task<IActionResult> GetPictureAsync(Guid id)
{
...
}
}
我正在使用 LinkGenerator 从 GetPictureAsync 创建绝对 URI。并设置 Startup class 以作为 DI 启动 HttpContextAccessor。
// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHttpContextAccessor();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapDefaultControllerRoute();
});
}
在我的习惯中 class 我是这样使用的:
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
原因是您在 SomeMethod
中使用了错误的控制器名称。 按照您提供的步骤操作,我重现了您的问题。
您应该使用 Market
,而不是 Markets
。
因为你的控制器名称是MarketController
。
测试后,对我有用。
那是控制器:
[ApiController]
[Route("api/[controller]")
public class MarketController : ControllerBase
{
[HttpGet("{id}/picture")
public async Task<IActionResult> GetPictureAsync(Guid id)
{
...
}
}
我正在使用 LinkGenerator 从 GetPictureAsync 创建绝对 URI。并设置 Startup class 以作为 DI 启动 HttpContextAccessor。
// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHttpContextAccessor();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapDefaultControllerRoute();
});
}
在我的习惯中 class 我是这样使用的:
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
原因是您在 SomeMethod
中使用了错误的控制器名称。 按照您提供的步骤操作,我重现了您的问题。
您应该使用 Market
,而不是 Markets
。
因为你的控制器名称是MarketController
。
测试后,对我有用。