wid*_*get 5 versioning asp.net asp.net-web-api2
我是ASP.NET的新手,但我希望为即将开始的新API实现一些版本控制.
我甚至不确定我正在寻找什么是可能的,但我正在使用一个非常干净的版本方法使用头部变量.
理想情况下,我希望能够在代码结构中包含一个版本文件夹,并在其中包含不同的API版本.每个版本文件夹都包含核心API代码的完整副本,所以我知道永远不会有任何冲突等.我知道这会使代码膨胀,但值得保持它非常干净,只有2-3个以上API的版本有效.
我在Internet上发现了许多标题样本,但它们都要求类在不同的名称空间中,如果我正在完成代码的复制,那么每次复制时都必须重命名所有类.
我正在尝试做什么?或者在处理多个类时是否有更清洁的解决方案?
RESTful方式版本有四种基本方法 -
URI路径此方法采用以下形式:
http:// api/v2/Tasks / {TaskId}
URI参数此方法采用以下形式:
http:// api/Tasks / {TaskId}?v = 2
内容协商这是在HTTP标头中完成的.
内容类型:application/vnd.taskManagerApp.v2.param.json
请求标头这也在HTTP标头中完成.
x-taskManagerApp-version:2
我个人喜欢第一种方法.您可以阅读Mike Wasson的ASP.NET Web API:使用命名空间到版本Web API.
许多人修改了Mike Wasson的原始资料.我喜欢Jamie Kurtz,Brian Wortman在ASP.NET Web API 2中使用过的那本书.
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 }
);
Run Code Online (Sandbox Code Playgroud)
然后,添加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;
}
}
Run Code Online (Sandbox Code Playgroud)
您只需将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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1902 次 |
| 最近记录: |