2012-07-04 40 views
87

Soy muy nuevo en ASP.NET 4.0 Web API. Se puede redirigir a otra URL al final de la acción POST ?, algo así como ... Response.Redirect(url)Redirect from asp.net web api post action

En realidad me carga de archivos desde una aplicación MVC (digamos www.abcmvc.com) a través de la API de Web (por ejemplo www.abcwebapi.com/upload)

Aquí upload es la acción POST. Publiqué un formulario de varias partes para la acción posterior del controlador de carga de la API web. Después de cargar me gustaría redirigir a www.abcmvc.com.

¿Esto es posible?

Respuesta

164

Claro:

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; 
} 
+7

Usando esta técnica de redirección resolvió el "objeto se trasladó a" página WebAPI que estaba recibiendo con otras técnicas de redirección. También para redirigir temporalmente en lugar de permanente puede usar 'HttpStatusCode.Redirect' (302) o' .RedirectMethod' (303) – AaronLS

+0

@Darin Dimitrov, esto funciona. ¿Por qué cuando uso HttpStatusCode.Redirect, mi cliente recibe una respuesta 401? – Brett

24

Aquí es otra forma se puede llegar a la raíz de su sitio web sin codificar duro la url:

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

Nota: sólo funcionará si tanto el MVC sitio web y WebApi están en la misma URL

0

Puede verificar esto

[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 Por favor deja de sugerir la misma edición. Si lo desea, publique el código que cambió en una respuesta separada. No tiene sentido continuar editando, los revisores bajarán cada edición. – Druzion

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