在Web Api控制器(HTTP 302找到)中使用重定向
本文关键字:重定向 找到 Api Web 控制器 HTTP | 更新日期: 2023-09-27 18:16:12
由于某种原因,我在试图找出如何从控制器内重定向(HTTP 302 Found
)到绝对URL时遇到了很多麻烦。
我已经试过了:
this.Redirect("/assets/images/avatars/profile.jpg");
但是我得到一个异常抛出
抛出异常:'System. 'System.dll中的UriFormatException
附加信息:Invalid URI:无法确定URI的格式。
我在这里看到的其他答案似乎对我来说都不是可用的。我使用Web API
和MVC 5
对于Redirect
,您需要发送一个有效的 URI
。在您的示例中,如果您只想返回relative URI
,则必须告诉URI class
:
public IHttpActionResult Get()
{
return Redirect(new Uri("/assets/images/avatars/profile.jpg", UriKind.Relative));
}
在。net Core 2.1中,可能还有。net Core的较低版本,你不能传入Uri。因此,您必须创建Uri并调用. tostring()方法。
。
[HttpGet]
public IActionResult Get()
{
Uri url = new Uri("../Path/To/URI", UriKind.Relative);
return Redirect(url.ToString());
}
在我看来这是一些毫无意义的缺点。. net Framework Web Api Redirect方法不支持获取uri路径字符串作为位置。
所以你必须按照这个答案去做。
但是与其每次重定向都这样做,不如修复API:
/// <inheritdoc />
protected override RedirectResult Redirect(string location)
{
// The original version just crash on location not supplying the server name,
// unless who asked it to please consider the possibility you do not wish to tell
// it every time you have a redirect to "self" to do.
return base.Redirect(new Uri(location, UriKind.RelativeOrAbsolute));
}
我把它放在我的基本控制器,所以可以忘记这个缺点