Добрый день,
У меня возникли проблемы с маршрутизацией конечной точки в моем веб-API с использованием атрибутной маршрутизации и промежуточного программного обеспечения ASP. NET основной маршрутизации.
У меня есть Контроллер API, который выглядит примерно так:
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();
}
}
Можно ли этого добиться с помощью атрибутной маршрутизации, и если да, то чего мне не хватает?
Спасибо!