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?

Shahdat
źródło

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;
}
Darin Dimitrov
źródło
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

sttaq
źródło
6
    [HttpGet]
    public RedirectResult Get()
    {
        return RedirectPermanent("https://www.google.com");
    }
Jigar Mistri
źródło
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);
}
Debendra Dash
źródło
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