簡體   English   中英

NET Core如何執行api版本控制?

[英]How to perform api versioning in .net core?

我編寫了一個如下所示的控制器(.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" };
    }
}

我以這種方式調用上述控制器(麻煩的調用):

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

但是我仍然收到如下所示的404錯誤。

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

不知道我在做什么錯。 任何幫助都非常感謝!

您不需要提供這樣的路由,因為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-version:2

(這是通過ConfigureServices中的AddApiVersioning完成的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM