Redirection à partir de l'action de publication de l'API Web asp.net

112

Je suis très nouveau dans l'API Web ASP.NET 4.0. Pouvons-nous rediriger vers une autre URL à la fin de l'action POST ?, quelque chose comme ...Response.Redirect(url)

En fait, je télécharge un fichier depuis une application MVC (disons www.abcmvc.com) via l'API Web (disons www.abcwebapi.com/upload)

Voici uploadl'action POST. Je poste un formulaire en plusieurs parties dans l'action de publication du contrôleur de téléchargement de l'API Web. Après le téléchargement, je souhaite rediriger vers www.abcmvc.com.

Est-ce possible?

Shahdat
la source

Réponses:

206

Sûr:

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
la source
9
L'utilisation de cette technique de redirection a résolu le "objet déplacé vers" la page WebAPI que j'obtenais avec d'autres techniques de redirection. Aussi pour Rediriger temporaire au lieu de permanent, vous pouvez utiliser HttpStatusCode.Redirect(302) ou .RedirectMethod(303)
AaronLS
@Darin Dimitrov, cela fonctionne. Pourquoi est-ce que lorsque j'utilise HttpStatusCode.Redirect à la place, mon client reçoit une réponse 401?
Brett
26

Voici une autre façon d'accéder à la racine de votre site Web sans coder en dur l'URL:

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

Remarque: ne fonctionnera que si votre site Web MVC et WebApi sont sur la même URL

sttaq
la source
6
    [HttpGet]
    public RedirectResult Get()
    {
        return RedirectPermanent("https://www.google.com");
    }
Jigar Mistri
la source
5

Vous pouvez vérifier ceci

[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
la source
1
@dotnetguy Veuillez arrêter de suggérer la même modification. Si vous le souhaitez, publiez le code que vous avez modifié dans une réponse distincte. Il est inutile de continuer à modifier, les réviseurs rejetteront chaque modification.
Kaspar Lee