如何将操作结果的结果设置为使用Post和Not Get。 我需要将结果重定向到需要使用post方法发送数据的外部站点。Asp.Net MVC后操作结果
(想知道如何使用httpverbs.post过滤器重定向到另一个动作 - 但在这一点上对我而言并不重要)。
如何将操作结果的结果设置为使用Post和Not Get。 我需要将结果重定向到需要使用post方法发送数据的外部站点。Asp.Net MVC后操作结果
(想知道如何使用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);
谢谢!我将创建一个隐藏所有字段的视图,并使用js单击提交按钮。 – Debra 2010-01-21 07:08:52