如何将操作结果的结果设置为使用 Post 而不是 Get。我需要将结果重定向到需要使用 post 方法发送数据的外部站点。
(还想知道如何使用 httpverbs.post 过滤器重定向到另一个动作 - 但此时对我来说并不重要)。
如何将操作结果的结果设置为使用 Post 而不是 Get。我需要将结果重定向到需要使用 post 方法发送数据的外部站点。
(还想知道如何使用 httpverbs.post 过滤器重定向到另一个动作 - 但此时对我来说并不重要)。
根据定义,重定向将生成 GET 请求。您可以使用 WebClient 代表他们执行 POST,但您不能使用 POST 将他们的浏览器重定向到那里。如果帖子需要转到另一个站点,您可能希望简单地生成表单操作,以便它直接在那里发布。
您可以执行以下操作:返回一个动作结果,该结果发出带有字段的表单并使用一些 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 );