Domanda

Come si imposta il risultato di un risultato azione per utilizzare Post e non ottenere. Ho bisogno di reindirizzare il risultato a un sito esterno che richiede i dati da inviare utilizzando il metodo POST.

(Vorrei sapere anche come reindirizzare a un'altra azione con un filtro httpverbs.post - ma non così importante per me a questo punto).

È stato utile?

Soluzione

Per definizione un redirect genera una richiesta GET. Si potrebbe fare il POST per loro conto utilizzando un WebClient, ma non è possibile reindirizzare il browser ci usando POST. Se il post ha bisogno di andare in un altro sito, si potrebbe desiderare di generare semplicemente il form action in modo che messaggi direttamente lì.

Altri suggerimenti

Si potrebbe procedere come segue:. Restituire un risultato un'azione che emette un modulo con i campi e utilizza alcune JavaScript per inviare automaticamente il modulo emessa

Ecco il codice per 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();
    }

}

Poi, quando si richiede un risultato azione nel vostro controller per restituire un POST e non un uso GET:

return new HttpPostResult( url , inputs );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top