在 Web Api 控制器中使用重定向(发现 HTTP 302)
Use Redirect in Web Api Controller (HTTP 302 Found)
出于某种原因,我在尝试找出如何从控制器中重定向 (HTTP 302 Found
) 到绝对 URL 时遇到了很多麻烦。
我试过这个:
this.Redirect("/assets/images/avatars/profile.jpg");
但是我抛出异常
Exception thrown: 'System.UriFormatException' in System.dll
Additional information: Invalid URI: The format of the URI could not be determined.
我在这里看到的所有其他答案似乎都对我不可用。我正在使用 Web API
和 MVC 5
.
使用Redirect
,您需要发送一个有效 URI
。在你的情况下,如果你只想 return 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 重定向方法不支持获取 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));
}
我把它放在我的基本控制器中,所以可以忘记这个缺点。
出于某种原因,我在尝试找出如何从控制器中重定向 (HTTP 302 Found
) 到绝对 URL 时遇到了很多麻烦。
我试过这个:
this.Redirect("/assets/images/avatars/profile.jpg");
但是我抛出异常
Exception thrown: 'System.UriFormatException' in System.dll
Additional information: Invalid URI: The format of the URI could not be determined.
我在这里看到的所有其他答案似乎都对我不可用。我正在使用 Web API
和 MVC 5
.
使用Redirect
,您需要发送一个有效 URI
。在你的情况下,如果你只想 return 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 重定向方法不支持获取 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));
}
我把它放在我的基本控制器中,所以可以忘记这个缺点。