Поддержка номера версии и имени класса для URL-адреса маршрута с помощью функции Azure 2.x

#c# #azure #asp.net-core #azure-functions

#c# #azure #asp.net-core #azure-функции

Вопрос:

Маршрут определяется с помощью v1 жестко запрограммированного, как показано ниже :

     [FunctionName("Car")]
    public async Task<IActionResult> Car(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "v1/Car")]
    HttpRequest httpRequest)
    {

    }
  

Можно ли изменить v1 выше, как показано ниже, с ASP.NET Ядро 2.x, где номер версии определяется централизованно и менее подвержен ошибкам?

 [ApiVersion("1")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class CarController : Controller
{

}
  

Visual Studio 2017

Обновить

У меня есть две функции в классе с такими URL-адресами, как этот:

 /v1/classname/car1

/v1/classname/car2
  

В настоящее время я должен сделать

 Route = "classname/car1"
Route = "classname/car2"
  

Возможно ли централизовать classname в части URL?

Можно ли применить номер версии к функциям выбранного класса? Таким образом, разный номер версии может использоваться для функций разного класса одновременно

Интересно, поддерживают ли Azure Functions это следующим образом ASP.NET ЯДРО 2.x.

Ответ №1:

Согласно предоставленному вами описанию, вы хотите, чтобы номер версии определялся централизованно. Если это так, вы могли бы использовать routePrefix in host.json для достижения этой цели.

Для версии v2 вы могли бы использовать пример в host.json , приведенный ниже:

 {
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": "v1"
    }
  }
}
  

И заголовок функции следующим образом:

 public static async Task<IActionResult> Car(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "Car")]
    HttpRequest httpRequest, ILogger log)
    {    }
  

Результат здесь:

 [POST] http://localhost:7071/v1/Car
  

Для получения более подробной информации вы могли бы обратиться к этой статье.

Комментарии:

1. Ваш совет работает отлично. Можете ли вы, пожалуйста, ознакомиться с моим обновлением для решения аналогичной проблемы?

2. Проблема в том, что RoutePrefix применяется ко всем конечным точкам. Возможно ли применить это к функциям выбранного класса. Таким образом, для разных функций одновременно можно использовать разные номера версий.

3. Кажется, что это возможно. Тот routeprefix , который применяется ко всем маршрутам. Если вы все еще хотите применить маршрут к выбранному классу, вы могли бы развернуть функцию в Azure и установить route свойство в каждой функции function.json . Пожалуйста, обратитесь к этой статье .

4. Спасибо. Меняем его для каждой функции. json после публикации кода подвержен ошибкам. Интересно, поддерживают ли функции Azure это, например ASP.NET ЯДРО 2.x.

5. Почему вы хотите, чтобы функция Azure поддерживала то же самое, что asp.net ядро 2.x?