Dot-Net
MVC6 的 VersionedRoute 屬性實現
我正在嘗試在 REST API 上啟用版本控制,其中版本在標頭中指定為
"api-version":2.根據本教程,我只需要創建
VersionConstraint : IHttpRouteConstraint和
VersionedRoute: RouteFactoryAttribute用法是將
[VersionedRoute("api/controllerName", 2)]屬性應用於為特定版本(例如本例中的版本 2)設計的控制器。這一切都很好,但不幸的是,這一切都在 MVC5 中,而我正在使用 MVC6。因此,
RouteFactoryAttribute並且IHttpRouteConstraint不工作。我設法找到
IRouteConstraint了替換IHttpRouteConstraint(希望它會起作用),但我找不到RouteFactoryAttribute.如果有人可以使用 MVC 6 提供此範例,或者至少提及我需要繼承的正確類(理想情況下帶有命名空間)?
這是您需要的最少工作量。
首先,去那裡複製以下 3 個文件的程式碼:
一旦你有了這個,我們將改變以下的
GetVersion方法VersionRangeValidator:public static string GetVersion(HttpRequest request) { if (!string.IsNullOrWhiteSpace(request.Headers["api-version"])) return request.Headers["api-version"]; return "1"; }這將讀取標頭並返回 API 版本。預設將
v1在這種情況下。以下是如何在控制器上使用它(或者它可以是具有 2 個操作的相同控制器:
[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"; } }所以現在你只需要給它正確的標題就可以了。這段程式碼已經用 jQuery 進行了測試,如下所示:
$(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); }); });