在ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了。如何实现API的版本呢? 1、通过路由设置版本 最简单的一种方式是通过路由设置,不同的路由,不同的版本,不同的controller。 config.Routes.MapHttpRoute( ...
在get='_blank'>ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了。如何实现API的版本呢?
1、通过路由设置版本
最简单的一种方式是通过路由设置,不同的路由,不同的版本,不同的controller。
config.Routes.MapHttpRoute( name: "Food", routeTemplate: "api/v1/nutrition/foods/{foodid}", defaults:...)config.Routes.MapHttpRoute( name: "Foodv2", routeTemplate: "api/v2/nutrition/foods/{foodid}", defaults:...)
客户端大致这样请求:http://localhost:8901/api/nutrition/foods/4492/measures/7269?v=2
using System.Web.http.Dispatcherpublic class CountingKsControllerSelector : DefaultHttpControllerSelector{ private HttpConfiguraion _config; public CountgKsControllerSelector(HttpConfiguraiton cofig) : base(config) { _config = config; } //设计就是返回HttpControllerDesriptor的过程 public override System.Web.Http.Controllers.HttpControllerDescriptor SelectController(HttpRequestMessage request) { //获取所有的controller键值集合 var controllers = GetControllerMapping(); //获取路由数据 var routeData = request.GetRouteData(); //从路由中获取当前controller的名称 var controllerName = (string)routeData.Values["controller"]; HttpControllerDescriptor descriptor; if(controllers.TryGetValue(controllerName, out descriptor)) { //var version = "2"; //从QueryString中获取版本 var version = GetVersionFromQueryString(request); var newName = string.Concat(controllerName, "V", version); HttpControllerDescriptor versionedDescriptor; if(controllers.TryGetValue(newName, out versionedDescriptor)) { return versionedDescriptor; } return descriptor; } return null; } //从QueryString中获取版本 private string GetVersionFromQueryString(HttpRequestMessage request) { var query = HttpUtility.ParseQueryString(request.RequestUri.Query); var version = query["v"]; if(version != null) { return version; } return "1"; }}
客户端大致这样请求:User-Agent:Fiddler客户端大致这样请求:User-Agent:Fiddler在WebApiConfig.cs中
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();CreateMediaTypes(jsonFormatter);private static void CreateMediaTypes(JsonMediaTypeFormatter jsonFormatter){ var mediaTypes = new string[] { "application/vnd.counting,s.food.v1+json", "application/vnd.countingks.measure.v1+json", "application/vnd.countgks.measure.v2+json", "applicatikon/vnd.countingks.diary.v1+json", "application/vnd.countingks.diaryEntry.v1+json" }; foreach(var mediaType in mediaTypes) { jsonFormatter.SupportedMeidaTypes.Add(new MediaTypeHeaderValue(mediaType)); }}
User-Agent:Fiddlerhttps://github.com/Sebazzz/SDammann.WebApi.Versioning
原标题:ASP.NET Web API中实现版本的几种方式
关键词:ASP.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。