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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET Web API更改请求URI(重定向到另一个方法)相关的知识,希望对你有一定的参考价值。

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

api/v1/Resource
api/v2/Resource

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

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

我已经尝试使用DelegatingHandler来更改Request 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,还是以任何其他方式完成这种重定向?

答案

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

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

}

以上是关于ASP.NET Web API更改请求URI(重定向到另一个方法)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用javascript向ASP.NET web api Controller发送http POST请求

使用 OData 的 ASP.Net Core Web API 实现对于单个实体 URI 失败

Web API系列教程2.2 — ASP.NET Web API中的路由和动作选择机制

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

Web API系列教程2.1 — ASP.NET Web API中的路由机制

ASP.NET Web API - 尝试传递参数时不支持 GET HTTP Verb (405)