Перенаправление с действия публикации веб-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-адресе.

sttaq
источник
6
    [HttpGet]
    public RedirectResult Get()
    {
        return RedirectPermanent("https://www.google.com");
    }
Джигар Мистри
источник
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