gpt4 book ai didi

c# - ASP.NET Web API (.NET Core 3.1) 中的端点路由问题

转载 作者:行者123 更新时间:2023-12-04 10:43:25 26 4
gpt4 key购买 nike

下午好,

我在使用属性路由和 ASP.NET 核心路由中间件的 Web API 中遇到端点路由问题。

我有一个大致如下所示的 API Controller :

public class UsersController : ControllerBase
{
[HttpGet]
[Route("v1/users/{id}", Name = nameof(GetUser), Order = 1)]
public async Task<ActionResult> GetUser([FromQuery(Name = "id")] string userGuid)
{
// Implementation omitted.
}

[HttpGet]
[Route("v1/users/me", Name = nameof(GetCurrentUser), Order = 0)]
public async Task<ActionResult> GetCurrentUser()
{
// Implementation omitted.
}
}

我正在尝试配置端点路由,以便对“v1/users/me”的请求路由到“GetCurrentUser()”方法,而与模板“v1/users/{id}”匹配的请求(其中 {id} ! = me) 被路由到 'GetUser()' 方法。我希望可以通过将“v1/users/me”端点放在端点顺序中的另一个端点之前来解决这个问题,但似乎路由中间件不尊重 order 参数。我还尝试在映射其余端点之前显式映射“v1/users/me”端点,但这似乎也不起作用。

这是当前的启动配置:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseResponseCompression();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
// Explicit mapping of the GetCurrentUser endpoint - doesn't seem to do anything.
// endpoints.MapControllerRoute("v1/users/me", "Users/GetCurrentUser");

endpoints.MapControllers();
}
}

这是否可以通过属性路由来实现,如果可以,我错过了什么?

谢谢!

最佳答案

如果您像这样保留默认值,这应该已经可以正常工作了:

[HttpGet("v1/users/{id}")]
public async Task<ActionResult> GetUser(string id)
{
return Ok(new { id = id });
}

[HttpGet("v1/users/me")]
public async Task<ActionResult> GetCurrentUser()
{
return Ok(new { id = "current" });
}

对于属性路由,包含恒定部分的路由比在同一位置包含路由变量的路由更受欢迎。所以 v1/users/me排名高于 v1/users/{id}id = "me" ,所以你应该看到 GetCurrentUser当您访问该路线时运行。这与 Controller 中的方法顺序无关。

关于c# - ASP.NET Web API (.NET Core 3.1) 中的端点路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59826887/

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