出于某种原因,我在尝试找出如何将(HTTP 302 Found
)重定向到控制器内的绝对URL方面遇到了很多麻烦。
我试过这个:
this.Redirect("/assets/images/avatars/profile.jpg");
但是我得到一个异常抛出
抛出异常:System.dll中的“System.UriFormatException”
其他信息:无效的URI:无法确定URI的格式。
我在这里看到的每一个答案似乎都不适合我。我使用的是Web API
和MVC 5
。
答案 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));
}
我把它放在我的基本控制器中,所以可以忘记这个缺点。