Добавление aspnet-api-versioning не позволяет UrlHelper генерировать маршруты API-контроллера в запросе Razor Pages.
Я могу создать файл-> новый проект API aspnetcore и использовать IUrlHelper
создать маршрут по имени без проблем.
[Route("api/[controller]")]
public class ValuesController : Controller
{
public const string GetValues = "GetValues";
public const string GetValuesById = "GetValuesById";
public static string[] Values = new[] { "value1", "value2", "value3", };
// GET api/values
[HttpGet(Name = GetValues)]
public IEnumerable<object> Get()
{
var result = new List<object>();
for(int index = 0; index < Values.Length - 1; index++)
{
string routeForElement = this.Url.RouteUrl(GetValuesById, new { Id = index });
result.Add(new { Value = Values[index], Route = routeForElement });
}
return result;
}
// GET api/values/5
[HttpGet("{id}", Name = GetValuesById)]
public string Get(int id)
{
if (id > (Values.Length - 1))
{
return "Invalid Id";
}
return Values[id];
}
}
Когда ответ отправляется обратно, у меня правильно есть маршруты, которые я создал:
[
{
"value": "value1",
"route": "/api/v1/Values/0"
},
{
"value": "value2",
"route": "/api/v1/Values/1"
},
{
"value": "value3",
"route": "/api/v1/Values/2"
}
]
Затем я могу использовать Visual Studio Scaffolding для создания страницы Razor и продолжать генерировать тот же маршрут без каких-либо проблем на моей странице Razor:
модель
public class IndexModel : PageModel
{
public List<string> Routes { get; set; } = new List<string>();
public void OnGet()
{
for (int index = 0; index < ValuesController.Values.Length; index++)
{
string routeForElement = this.Url.RouteUrl(ValuesController.GetValuesById, new { Id = index });
Routes.Add(routeForElement);
}
}
}
страница
@page
@model UrlHelperWithPages.Pages.IndexModel
@foreach(string route in Model.Routes)
{
<h4>@route</h4>
}
Это делает маршруты без проблем.
Если я добавлю aspnet-api-versioning
Пакет nuget и настройте его услуги:
services.AddApiVersioning();
Мой контроллер API продолжает работать со следующей модификацией. Любой запрос, предназначенный для этого контроллера, имеет правильно сформированные маршруты.
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class ValuesController : Controller
Однако Razor Pages перестает работать, когда мы пытаемся сгенерировать маршрут из запроса Razor Pages. RouteUrl
метод теперь возвращает ноль. Я попытался обновить данные маршрута, предоставленные RouteUrl
метод, чтобы я передал жестко запрограммированную версию (для тестирования), и она тоже не работает.
new { version = 1, Id = index }
Есть ли какая-либо конфигурация, которая должна произойти в пакете управления версиями API для поддержки страниц? У нас есть бритвенные страницы, которые мы хотим сгенерировать API-маршрутами для рендеринга на странице, но, похоже, это не работает.