Przekierowanie z akcji postu api sieci web asp.net


112

Jestem bardzo nowy w ASP.NET 4.0 Web API. Czy możemy przekierować do innego adresu URL na końcu akcji POST?, Coś w rodzaju ...Response.Redirect(url)

Właściwie przesyłam plik z aplikacji MVC (powiedzmy www.abcmvc.com) przez Web API (powiedzmy www.abcwebapi.com/upload)

Oto uploadakcja POST. Wysyłam wieloczęściowy formularz do akcji post kontrolera przesyłania Web API. Po przesłaniu chciałbym przekierować z powrotem do www.abcmvc.com.

czy to możliwe?

Odpowiedzi:


206

Pewnie:

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
Użycie tej techniki przekierowania rozwiązało problem przeniesienia obiektu na stronę WebAPI, który otrzymywałem z innymi technikami przekierowania. Również w przypadku przekierowania tymczasowego zamiast stałego możesz użyć HttpStatusCode.Redirect(302) lub .RedirectMethod(303)
— AaronLS

@Darin Dimitrov, to działa. Dlaczego jest tak, że gdy zamiast tego używam HttpStatusCode.Redirect, mój klient otrzymuje odpowiedź 401?
— Brett

26

Oto inny sposób na dostanie się do katalogu głównego witryny bez twardego kodowania adresu URL:

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

Uwaga: będzie działać tylko wtedy, gdy zarówno witryna MVC, jak i WebApi znajdują się pod tym samym adresem URL


6
    [HttpGet]
    public RedirectResult Get()
    {
        return RedirectPermanent("https://www.google.com");
    }

5

Możesz to sprawdzić

[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 Proszę przestać sugerować tę samą zmianę. Jeśli chcesz, prześlij zmieniony kod w osobnej odpowiedzi. Nie ma sensu kontynuować edycji, recenzenci odrzucą każdą edycję.
— Kaspar Lee
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.