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

时间:2016-11-02 17:50:38

标签: c# asp.net-mvc redirect asp.net-web-api http-status-code-302

出于某种原因,我在尝试找出如何将(HTTP 302 Found)重定向到控制器内的绝对URL方面遇到了很多麻烦。

我试过这个:

this.Redirect("/assets/images/avatars/profile.jpg");

但是我得到一个异常抛出

  

抛出异常:System.dll中的“System.UriFormatException”

     

其他信息:无效的URI:无法确定URI的格式。

我在这里看到的每一个答案似乎都不适合我。我使用的是Web APIMVC 5

3 个答案:

答案 0 :(得分:9)

使用Redirect,您需要发送有效 URI。在您的情况下,如果您只想返回relative URI必须告诉URI class

public IHttpActionResult Get()
{
    return Redirect(new Uri("/assets/images/avatars/profile.jpg", UriKind.Relative));
}

答案 1 :(得分:0)

在.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());
 }

答案 2 :(得分:0)

从我的角度来看,这是一些不合理的缺点。 .Net Framework Web Api重定向方法不支持获取uri路径字符串作为位置。

因此,您必须按照answer的提示进行操作。

但比每次都要重定向时都要这样做,最好修复该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));
}

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