我需要使用POST方法将用户重定向到http://www.someurl.com?id=2。 有可能吗?如果是,那该怎么办?
现在我已经关注并正确转发了POST数据,但它删除了?id = 2:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.someurl.com?id=2");
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postData.Length;
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postData);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Response.Write(reader.ReadToEnd());
}
我需要两个查询字符串数据的原因 - > ?id = 2和POST数据是因为我将查询字符串传递给页面,其中javascript将处理查询字符串数据,而.NET将使用通过POST方法发送的数据。我传递的POST数据可能比GET方法允许的最大字符数长,因此我不能只使用GET方法...那么,您的建议是什么?
更多信息: 我正在编写一个路由页面,它向查询字符串添加一些自定义信息,然后将所有数据(旧的和新的)进一步路由到提供的某个URL。这个页面应该能够重定向到我们的服务器以及某人的服务器,它不需要知道它来自哪里或它去哪里,它只需要保持相同的POST,GET和HEADER信息以及在此步骤收到的其他信息。
答案 0 :(得分:2)
没有。将POST和GET混合在一起是没有理由的。
如果你需要使用Javascript可用的请求传入参数,只需将它们发送到服务器,让服务器在隐藏字段中吐出相关信息......
<input type="hidden" value="id=2,foo=bar" disabled="disabled" />
这很简单。
注意:禁用隐藏字段以将其从子时间POST中排除(如果有);)
答案 1 :(得分:1)
问题我认为问题可能是postData不包含id参数,因为它是通过查询字符串提供的。
发布数据位于请求正文中,查询字符串数据位于网址中。
您可能需要从request.querystring中获取id到postdata变量。
答案 2 :(得分:1)
鉴于您的问题的额外信息,您需要提交给外部来源,我认为您必须做的是处理所有数据并返回带有隐藏字段的表单。添加一些javascript以在加载后立即将该表单提交到外部URL。请注意,您不会以这种方式上传文件,但您可以正确处理POST和GET数据。
答案 3 :(得分:0)
据我所知,无法使用POST重定向。难道你不能简单地假装(内部处理,好像)请求是你要将用户重定向到的页面吗?
答案 4 :(得分:0)
我发现这个问题最接近的答案就在这里,但它对用户来说并不透明,因此对我来说不够好 - &gt; Response.Redirect with POST instead of Get?
如果有人有任何其他建议,请回复!
答案 5 :(得分:0)
尝试在POST中发送包括id的所有数据。然后,当您在C#中处理数据时,您可以读取id变量并将其写回标签中的网页:
<script type="text/javascript">
id = <%=request_id%>
</script>
然后确保你的javascript在完全加载onload()之后开始运行,你就可以了。
答案 6 :(得分:0)
您实际要做的是重定向POST数据。我可以问为什么?如果实际上两个页面都在您的服务器上,我看不出您为什么要这样做的原因。
您应该做的是处理脚本#1中的所有POST数据,然后重定向到类似script2.aspx?id = 234的内容,其中ID 234引用数据库中的数据。然后,您可以稍后在script2上调用它,并将所有数据转储到Javascript变量中,以供客户端使用。
无论哪种方式,关于这个过程的一些事情对我来说听起来很可疑。混合您的数据处理客户端和服务器端就像混合伏特加和牛奶。它很少运作良好。 (但是白俄罗斯人肯定很好吃!)
答案 7 :(得分:0)
实际上我通过混合Javascript和Codebehind代码实现了预期的结果。所以,我所做的是在服务器端代码中,我构建了一个完整的网页,如下所示:
var strForm = new StringBuilder();
strForm.Append("<form id=\"" + formId + "\" name=\"" + formId + "\" action=\"" + url + queryString +"\" method=\"POST\">");
foreach (string key in data)
{
strForm.Append("<input type=\"hidden\" name=\"" + key + "\" value=\"" + data[key].Replace("\"", """) + "\">");
}
strForm.Append("</form>");
除了在服务器端构建的这个表单之外,我还添加了一个javascript代码,提交了我刚刚构建的表单。
var strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var v" + formId + " = document." + formId + ";");
strScript.Append("v" + formId + ".submit();");
strScript.Append("</script>");
strForm.Append("</form>");
所以,这个代码的作用如你所见,表单操作是一个附有查询字符串参数的URL ...但由于表单方法是POST,我们将我们添加的值作为隐藏字段提交为POST参数...所以我们最终提交POST和GET参数。
希望这个解决方案可以帮助某人=)