2010-01-20 5 views
1

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

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

ответ

3

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

+0

Спасибо! Я создам представление со всеми скрытыми полями и использую js, чтобы нажать кнопку отправки. – Debra

0

Вы можете сделать следующее: вернуть результат действия, который испускает форму с полями и использует некоторый 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); 
Смежные вопросы