ASP.. NET Web API更改请求URI(重定向到另一个方法)
本文关键字:重定向 另一个 方法 URI 请求 Web NET API ASP | 更新日期: 2023-09-27 18:19:19
我有一个ASP。. NET项目,其中API版本控制已通过URL版本控制实现。如:
api/v1/Resource
api/v2/Resource
现在的要求是,如果用户请求的资源在该版本中不可用,那么它应该回退到以前的版本。假设用户想访问api/v2/SomeResource
,但同样不可用,那么请求应该转发到api/v1/SomeResource
。
我们可以拦截每个传入请求并在Route确定之前更改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或任何其他方式完成这种重定向之前,我们是否可以改变requesturi ?
如果你已经提前知道路由不再存在(如果你知道你想重定向到哪条路由,你就必须知道),那么你可以在同一个方法中添加多个路由。否则,你必须调用路由来查看它是否存在,如果它给出404,你就必须再次尝试下一个,依此类推。
[HttpGet, Route("api/v2/resource")]
[HttpGet, Route("api/v1/resource")]
public IHttpActionResult YourMethod()
{
}