HTTP POST - 我被卡住了

时间:2008-09-02 20:04:29

标签: asp.net forms http post

我必须将一些参数发布到网络外的网址,另一方面的开发人员要求我不要使用HTTP参数:相反,我必须在 HTTP标头中发布我的键值

事实是我并不真正理解他们的意思:我试图使用类似ajax的帖子,使用XmlHttp对象,而且我还尝试在标题中写入类似

的内容
Request.Headers.Add(key,value);

但我不能(框架例外);我尝试了另一种方法,使用像

这样的Response对象
Response.AppendHeader("key", "value");

然后重定向到页面...但这也不起作用。

我认为很明显,我被困在那儿,有什么帮助吗?


编辑我忘了在Win server 2003上告诉你我的环境是.Net 2.0,c#。 我得到的例外是

System.PlatformNotSupportedException was unhandled by user code
  Message="Operation is not supported on this platform."
  Source="System.Web"

这看起来像是我试用的Request.Add,MS一年前发布了一些不允许这样做的安全修复程序。

9 个答案:

答案 0 :(得分:3)

您是否尝试过WebClient类?示例可能如下所示:

        WebClient client = new WebClient();
        NameValueCollection data = new NameValueCollection();
        data["var1"] = "var1";
        client.UploadValues("http://somewhere.com/api", "POST", data);

答案 1 :(得分:1)

看看HttpWebRequest。您应该能够使用HttpWebRequest.Method =“POST”构建对相关URL的请求。

答案 2 :(得分:1)

就像@lassevk所说,重定向不起作用。

您应该使用WebRequest类从您的页面或应用程序执行HTTP POST。有一个例子here

答案 3 :(得分:0)

您应该发布更多信息。

例如,这是C#?它看起来像,但我可能错了。

另外,你说你得到一个异常,什么是异常类型和消息?

在任何情况下,你都无法重定向到POST页面,你需要从浏览器提交,而不是从服务器重定向提交,所以如果你想自动化这个,我猜你需要生成一个带有表单标记的html页面,带有一些隐藏的输入字段,然后使用javascript提交。

答案 4 :(得分:0)

我认为他们的意思是他们不希望您使用URL参数(GET)。如果您使用http标头,则不再通过POST进行查询。

答案 5 :(得分:0)

什么语言/框架?

使用Python和httplib2,您应该可以执行以下操作:

http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))

答案 6 :(得分:0)

我相信Request对象只接受一组预定义的标题。

还有一个枚举列出了所有支持的HTTP标头。

但我现在记不起来......我会在一秒钟内查看它......

答案 7 :(得分:0)

我使用XmlHttpRequest选项使用2个示例页面测试了您的场景。 使用XmlHttpRequest发布到的aspx页面中提供了自定义标头。

创建以下2页。确保aspx页面在解决方案中,以便您可以在调试器中运行,设置断点并检查Request.Header集合。

< HTML>

< HEAD>

< script language="javascript">

function SendRequest()
{
    var r = new XMLHttpRequest();
    r.open('get', 'http://localhost/TestSite/CheckHeader.aspx');
    r.setRequestHeader('X-Test', 'one');
    r.setRequestHeader('X-Test', 'two');
    r.send(null);

}
< script / >

< /头> <身体GT; <形式> < input type =“button”value =“Click Me”OnClick =“SendRequest();” /> < /形式> < /体> < / HTML>


CheckHeader.aspx

使用System;

使用System.Web;

使用System.Web.UI;

public partial class CheckHeader:System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)
{
    string value = string.Empty;
    foreach (string key in Request.Headers)
        value = Request.Headers[key].ToString();
}

}

Man ..这个html编辑很糟糕......或者我不知道如何使用它......

答案 8 :(得分:0)

我昨天遇到的异常是由于我在已经构建的页面的标题上写的愚蠢尝试造成的。

当我按照此处指出的方法之一开始创建我的请求时,我可以编写标题。

现在我正在使用WebRequest对象,如@sectrean here指示的样本。

非常感谢大家。 StackOverflow摇滚: - )