VersionedRoute Attribute Implementation for MVC6

后端 未结 1 1641
悲&欢浪女
悲&欢浪女 2021-02-01 21:19

I am trying to enable versioning on a REST API, where the version is specified in the header, as \"api-version\":2.

According to this tutorial I just need t

相关标签:
1条回答
  • 2021-02-01 21:50

    Here's the minimum amount of work you need.

    First, go there and copy the code for the 3 following files:

    • VersionGetAttribute
    • VersionRangeValidator
    • VersionRoute.cs

    Once you have this, we'll change the GetVersion method of VersionRangeValidator for the following:

    public static string GetVersion(HttpRequest request)
    {
        if (!string.IsNullOrWhiteSpace(request.Headers["api-version"]))
            return request.Headers["api-version"];
    
        return "1";
    }
    

    That will read the header and return the API version. The default will be v1 in this scenario.

    Here's how to use it on controllers (or it can be the same controllers with 2 actions:

    [Route("api/data")]
    public class DataController 
    {
        [VersionGet("", versionRange: "[1]")]
        public string GetData()
        {
            return "v1 data";
        }
    }
    
    [Route("api/data")]
    public class DataV2Controller 
    {
        [VersionGet("", versionRange: "[2]")]
        public string GetData()
        {
            return "v2 data";
        }
    }
    

    So now you just need to give it the right header and it's good. This code has been tested with jQuery like this:

    $(document).ready(function(){
        $.ajax({url: '/api/Data/', headers: { 'api-version': 1 }})
        .then(function(data){
                alert(data);
                });
        $.ajax({url: '/api/Data/', headers: { 'api-version': 2 }})
        .then(function(data){
                alert(data);
                });
    });
    
    0 讨论(0)
提交回复
热议问题