ASP.NET Web API更改请求URI(重定向到另一个方法)

时间:2015-10-26 13:22:02

标签: c# asp.net asp.net-web-api

我有一个ASP.NET项目,其中API版本已通过URL版本控制实现。例如:

api/v1/Resource
api/v2/Resource

现在的要求是,如果用户请求的资源在该版本中不可用,那么它应该回退到以前的版本。假设用户想要访问api/v2/SomeResource,但同样不可用,则请求应转发到api/v1/SomeResource

我们可以拦截每个传入的请求并在决定路由之前更改RequestURI吗?

我尝试使用 DelegatingHandler 来更改请求URI,但似乎在执行DelegatingHandler之前确定了路由。

protected override Task<HttpResponseMessage> SendAsync
    (HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
    request.RequestUri = new Uri(getNewURI(request.RequestUri.AbsoluteUri), UriKind.Absolute);
    return base.SendAsync(request, cancellationToken);
}

我们是否可以在通过Web API完成路由之前更改ReqestURI或以其他任何方式完成此类重定向?

1 个答案:

答案 0 :(得分:2)

如果您已经提前知道路线不再存在(如果您知道要重定向到哪条路线,则必须这样做),那么您可以添加多条路线到同一方法。否则你必须打电话给路线看它是否存在,如果它给了404,那么你将不得不再次使用下一个等等。

[HttpGet, Route("api/v2/resource")]
[HttpGet, Route("api/v1/resource")]
public IHttpActionResult YourMethod()
{

}