Как выполнить API-версии в ядре .net? - PullRequest
2 голосов
/ 29 марта 2019

Я написал контроллер, как показано ниже (.net core 2.1):

[ApiVersion("1")]
[Consumes("application/json")]
[Produces("application/json")]
[Route("v{version:apiVersion}/[controller]")]
public class AccountController : ControllerBase
{
    // GET: api/Account
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

Я вызываю вышеуказанный контроллер следующим образом (swagger call):

curl -X GET "https://localhost:44363/v1/Account" -H "accept: application/json"

Но я продолжаю получать ошибку 404, как показано ниже.

<code><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /v1/Account

Не уверен, что я делаю не так.Любая помощь высоко ценится!

1 Ответ

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

Вам не нужно указывать такой маршрут, как он уже известен системе управления версиями API.

Прежде всего, вам необходимо настроить управление версиями API, например:

public void ConfigureServices( IServiceCollection services )
{
    services.AddMvc();
    services.AddApiVersioning(o => o.ApiVersionReader = new HeaderApiVersionReader("api-version"));

    //and the rest
}

А затем простая конфигурация:

services.AddApiVersioning(
    o =>
    {
        o.AssumeDefaultVersionWhenUnspecified = true );
        o.DefaultApiVersion = new ApiVersion( 1 );
    } );

Это создаст версию API по умолчанию и предположит, что если в запросе не указана версия, будет принята версия по умолчанию.

Далееконтроллер должен выглядеть так:

[ApiVersion( "1" )]
[Route( "api/mystuff" )]
public class mystuff1: Controller 
{
    [HttpGet]
    public string Get() => "Mystuff1!";
}


[ApiVersion( "2" )]
[Route( "api/mystuff" )]
public class mystuff2 : Controller 
{
    [HttpGet]
    public string Get() => "Mystuff2!";
}

Затем просто добавьте заголовок к вашему запросу: api-версия: 2

(это делается AddApiVersioning в ConfigureServices).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...