Использовать перенаправление в контроллере Web Api (HTTP 302 найдено)
По какой-то причине у меня много проблем, пытаясь выяснить, как перенаправить (HTTP 302 Found
) на абсолютный URL из контроллера.
Я попробовал это:
this.Redirect("/assets/images/avatars/profile.jpg");
Но я получаю исключение
Возникло исключение: System.UriFormatException в System.dll
Дополнительная информация: Неверный URI: невозможно определить формат URI.
Любой другой ответ, который я вижу здесь, кажется, не доступен для меня. я использую Web API
а также MVC 5
,
2 ответа
С 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));
}
Я вставляю это в свой базовый контроллер, поэтому могу забыть об этом недостатке.