Asp.Net Core Set Версии API по умолчанию - PullRequest
0 голосов
/ 29 марта 2019

Я использую Asp.Net Core в качестве службы API отдыха.Мне нужно иметь версию API.На самом деле, я установил следующие параметры при запуске, и он работает правильно, но когда я установил версию по умолчанию, на которой он не работает.

services.AddVersionedApiExplorer(
                options =>
                    {
                        options.GroupNameFormat = "'v'VVV";
                        options.SubstituteApiVersionInUrl = true;
                        options.AssumeDefaultVersionWhenUnspecified = true;
                        options.DefaultApiVersion = new ApiVersion(1, 0);
                    });
services.AddApiVersioning(
                options =>
                    {
                        options.ReportApiVersions = true;
                        options.AssumeDefaultVersionWhenUnspecified = true;
                        options.DefaultApiVersion = new ApiVersion(1, 0);
                    })
            .AddMvc(
                options =>
                    {
                        options.RespectBrowserAcceptHeader = true;
                    })
            .AddXmlSerializerFormatters();

и установил атрибут в контроллерах следующим образом: Версия 1:

[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
    [HttpGet("log")]
    public string Get()
    {
        return $"{DateTime.Now}";
    }
}

Версия 2:

[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("2.0")]
public class UsersController : ControllerBase
{
    [HttpGet("log")]
    public string Get()
    {
        return $"{DateTime.Now}";
    }
}

Я могу получить результат в виде отображаемых URL:

http://localhost:5000/v1/users/log => Код состояния: 200

http://localhost:5000/v2/users/log => Код состояния: 200

Но http://localhost:5000/users/log => Код состояния: 404

Как настроить API по умолчанию при управлении версиями?

Спасибо всем, что нашли время, чтобы попытаться помочь объяснить

1 Ответ

0 голосов
/ 29 марта 2019

Ваша конфигурация правильно устанавливает версию API по умолчанию, если она не указана. Но ваши маршруты требуют, чтобы URL запроса включал v{version} часть. Поэтому одним из возможных решений является добавление другого маршрута без v{version}, например

[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[Route("/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
    [HttpGet("log")]
    public string Get()
    {
        return $"{DateTime.Now}";
    }
}

Теперь запрос к http://localhost:5000/users/log будет указывать на контроллер с версией API 1.0. Если вы добавите этот маршрут ко второму контроллеру, версия 1.0 все равно будет выбрана, потому что будет выбрано значение по умолчанию ApiVersion и это 1.0.

...