2010-01-20 4 views
1

Comment définir le résultat d'un résultat d'action pour utiliser Post et non Get. J'ai besoin de rediriger le résultat vers un site externe qui nécessite l'envoi des données en utilisant la méthode post.Résultat de l'action de publication Asp.Net MVC

(Aimeriez-vous savoir également comment rediriger vers une autre action avec un filtre httpverbs.post - mais pas aussi important pour moi à ce stade).

Répondre

3

Par définition, une redirection génère une requête GET. Vous pouvez faire le POST en leur nom à l'aide d'un WebClient, mais vous ne pouvez pas y rediriger leur navigateur à l'aide du POST. Si le message doit être redirigé vers un autre site, vous pouvez simplement générer l'action de formulaire pour qu'elle y publie directement.

+0

Merci! Je vais créer une vue avec tous les champs cachés et utiliser js pour cliquer sur le bouton soumettre. – Debra

0

Vous pouvez effectuer les opérations suivantes: Renvoyer un résultat d'action qui émet un formulaire avec les champs et utilise du JavaScript pour publier automatiquement le formulaire émis.

Voici le code pour HttpPostResult

public class HttpPostResult : 
    ActionResult 
{ 

    string _formName; 
    NameValueCollection _inputs; 
    string _url; 

    public HttpPostResult(
     string url , 
     NameValueCollection inputs , 
     string formName = "form1") 
    { 
     _url = url; 
     _inputs = inputs; 
     _formName = formName; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     // Html generation 
     var html = new StringBuilder(); 
     html.Append("<html><body onload=\"document.form1.submit()\">"); 
     html.AppendFormat(
      "<form name=\"{0}\" method=\"POST\" action=\"{1}\">" , 
      _formName , 
      _url 
      ); 
     foreach(var key in _inputs.AllKeys) 
      html.AppendFormat(
       "<input name=\"{0}\" type=\"hidden\" value=\"{1}\">" , 
       key , 
       _inputs[ key ] 
       ); 
     html.Append("</form></body></html>"); 

     // Write to Response stream 
     context.HttpContext.Response.Write(html.ToString()); 
     context.HttpContext.Response.End(); 
    } 

} 

Puis, quand vous avez besoin d'un résultat d'action dans vos contrôleurs pour retourner un POST et non une utilisation GET:

return new HttpPostResult(url , inputs); 
Questions connexes