Результат действия Asp.Net MVC - PullRequest
1 голос
/ 20 января 2010

Как установить результат результата действия, чтобы использовать Post, а не Get. Мне нужно перенаправить результат на внешний сайт, который требует отправки данных методом post.

(Хотелось бы также узнать, как перенаправить на другое действие с фильтром httpverbs.post - но для меня это не так важно)

Ответы [ 2 ]

3 голосов
/ 20 января 2010

По определению, перенаправление будет генерировать запрос GET. Вы можете сделать POST от их имени, используя WebClient, но вы не можете перенаправить их браузер туда, используя POST. Если сообщение нужно перейти на другой сайт, вы можете просто сгенерировать действие формы, чтобы оно отправляло туда напрямую.

0 голосов
/ 12 сентября 2014

Вы можете сделать следующее: Вернуть результат действия, который генерирует форму с полями и использует JavaScript для автоматической отправки отправленной формы.

Вот код для 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();
    }

}

Тогда, когда вам требуется, чтобы результат действия ваших контроллеров возвращал POST, а не использование GET:

return new HttpPostResult( url , inputs );
...