在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 APIMVC 5

在Web Api控制器(HTTP 302找到)中使用重定向

对于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));
}

我把它放在我的基本控制器,所以可以忘记这个缺点