ASP.NET API版本控制
|
我是ASP.NET的新手,但我希望为即将开始的新API实现一些版本控制. 我甚至不确定我正在寻找什么是可能的,但我正在使用一个非常干净的版本方法使用头变量. 理想情况下,我希望能够在代码结构中包含一个版本文件夹,并在其中包含不同的API版本. 我在Internet上发现了许多标题样本,但它们都要求类在不同的名称空间中,如果我正在完成代码的复制,那么每次复制时都必须重命名所有类. 我正在尝试做什么?或者在处理多个类时是否有更清洁的解决方案? 解决方法RESTful方式版本有四种基本方法 –> URI路径此方法采用以下形式: http://api/v2/Tasks/ {}的taskid http://api/Tasks/ {的TaskID}?V = 2 内容类型:application / vnd.taskManagerApp.v2.param.json x-taskManagerApp-version:2 我个人喜欢第一种方法.你可以阅读Mike Wasson’s ASP.NET Web API: Using Namespaces to Version Web APIs. 许多人修改了Mike Wasson的原始资源.我喜欢ASP.NET Web API 2 book by Jamie Kurtz,Brian Wortman中使用的那个. 由于它有太多移动件,我创建了a sample project at GitHub. config.Routes.MapHttpRoute(
name: "DefaultApi",routeTemplate: "api/{version}/{controller}",defaults: new { version = "v2" }
);
config.Routes.MapHttpRoute(
name: "DefaultApiWithId",routeTemplate: "api/{version}/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
);
然后,添加ApiVersionConstraint public class ApiVersionConstraint : IHttpRouteConstraint
{
public ApiVersionConstraint(string allowedVersion)
{
AllowedVersion = allowedVersion.ToLowerInvariant();
}
public string AllowedVersion { get; private set; }
public bool Match(HttpRequestMessage request,IHttpRoute route,string parameterName,IDictionary<string,object> values,HttpRouteDirection routeDirection)
{
object value;
if (values.TryGetValue(parameterName,out value) && value != null)
{
return AllowedVersion.Equals(value.ToString().ToLowerInvariant());
}
return false;
}
}
用法 您只需将RoutePrefix放在控制器上,就完成了. [RoutePrefix("api/{apiVersion:apiVersionConstraint(v1)}/values")]
public class ValuesController : ApiController
{
// GET api/v1/values
[Route("")]
public IEnumerable<string> Get()
{
return new string[] { "v1-value1","v1-value2" };
}
// GET api/v1/values/5
[Route("{id}")]
public string Get(int id)
{
return "v1-value-" + id;
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何更改FileUpload控件(System.Web.UI.WebCont
- asp.net-mvc – 变化:*错误地添加到http标头响应(asp.net
- asp.net-mvc – 使用LINQ to SQL在ASP.NET MVC中建模多对多
- ASP.NET:将DataTable呈现到字符串(HTML)的最短方法?
- ASP.NET MVC中的runat =“server”标签的状态是什么?
- ASP.NET-MVC(IIS6)高流量时出错:指定的强制转换无效
- 我需要知道什么才能使asp.net应用程序全球化?
- .net – 你用你的单元测试测试什么?
- 在ASP.NET MVC中使用Razor创建可重用的HTML视图组件
- asp.net – 如何在Button Click事件上调用此Jquery函数?
