У меня проблема с поведением Url.Action ();
У меня есть webapi, где все контроллеры требуют явного атрибута префикса маршрута, а все действия требуют атрибута маршрута.
Iзарегистрировать мои маршруты в WebApiConfig.cs
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
В настоящее время я закомментировал строку ниже, но (потому что) это не изменило неправильное поведение:
//config.Routes.MapHttpRoute(name: "DefaultApi",
//routeTemplate: "api/v{version:apiVersion}/{controller}/{action}/{id}", defaults: new {id = RouteParameter.Optional});
Мой контроллер выглядитследующим образом:
[RoutePrefix("api/v{version:apiVersion}/programs")]
public class ProgramsController : ApiController
{
[HttpGet, Route("{telemetryKey}/versions/latest")]
public async Task<LatestVersionResponse> GetLatestVersionInfo(Guid telemetryKey)
{
// serious business logic
}
}
Я ожидаю, что '@Url.Action("GetLatestVersionInfo", "Programs", new { telemetryKey = Guid.Parse("43808405-afca-4abb-a92a-519489d62290") })'
должен вернуть /api/v1/programs/43808405-afca-4abb-a92a-519489d62290/versions/latest
однако вместо этого я получу /Programs/GetLatestVersionInfo?telemetryKey=43808405-afca-4abb-a92a-519489d62290
.Итак, мой префикс и атрибуты маршрута игнорируются.
Swagger правильно обнаруживает мои маршруты, и я могу проверить, что запросы на ожидаемые маршруты работают нормально - только Url.Action () сбит с толку.
![enter image description here](https://i.stack.imgur.com/MVzJC.png)
Что может быть не так ...?