Перенаправление с действия публикации веб-API asp.net


113

Я новичок в веб-API ASP.NET 4.0. Можем ли мы перенаправить на другой URL-адрес в конце действия POST?, Что-то вроде ...Response.Redirect(url)

На самом деле я загружаю файл из приложения MVC (скажем www.abcmvc.com) через веб-API (скажем www.abcwebapi.com/upload)

Вот uploadдействие POST. Я отправляю составную форму в действие post контроллера загрузки веб-API. После загрузки я хотел бы вернуться к www.abcmvc.com.

Это возможно?

Ответы:


207

Конечно:

public HttpResponseMessage Post()
{
    // ... do the job

    // now redirect
    var response = Request.CreateResponse(HttpStatusCode.Moved);
    response.Headers.Location = new Uri("http://www.abcmvc.com");
    return response;
}

9
Используя этот метод перенаправления, я решил "объект перемещен на" страницу WebAPI, которую я получал с помощью других методов перенаправления. Также для временного перенаправления вместо постоянного вы можете использовать HttpStatusCode.Redirect(302) или .RedirectMethod(303)
AaronLS

@ Дарин Димитров, это работает. Почему, когда я использую HttpStatusCode.Redirect вместо этого, мой клиент получает ответ 401?
Бретт

26

Вот еще один способ получить доступ к корню вашего сайта без жесткого кодирования URL:

var response = Request.CreateResponse(HttpStatusCode.Moved);
string fullyQualifiedUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);
response.Headers.Location = new Uri(fullyQualifiedUrl);

Примечание: Будет работать, только если ваш веб-сайт MVC и WebApi находятся на одном URL-адресе.



5

Вы можете это проверить

[Route("Report/MyReport")]
public IHttpActionResult GetReport()
{

   string url = "https://localhost:44305/Templates/ReportPage.html";

   System.Uri uri = new System.Uri(url);

   return Redirect(uri);
}

1
@dotnetguy Пожалуйста, прекратите предлагать такое же изменение. Если хотите, опубликуйте измененный код в отдельном ответе. Нет смысла продолжать редактирование, рецензенты будут отклонять каждую правку.
Kaspar Lee
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.