5

我必须将一些参数发布到我的网络外部的 URL,而另一方的开发人员要求我不要使用 HTTP 参数:相反,我必须在HTTP Headers中发布我的键值。

事实是我并不真正理解它们的意思:我尝试使用类似 ajax 的帖子,带有 XmlHttp 对象,并且我尝试在标题中写入类似的内容

Request.Headers.Add(key,value);

但我不能(框架例外);我尝试了另一种方法,使用像这样的 Response 对象

Response.AppendHeader("key", "value");

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

很明显,我想,我被困在那里了,有什么帮助吗?


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

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

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

4

9 回答 9

3

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

        WebClient client = new WebClient();
        NameValueCollection data = new NameValueCollection();
        data["var1"] = "var1";
        client.UploadValues("http://somewhere.com/api", "POST", data);
于 2008-09-02T20:15:33.260 回答
1

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

于 2008-09-02T20:13:56.120 回答
1

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

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

于 2008-09-02T20:14:11.157 回答
0

您应该发布更多信息。

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

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

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

于 2008-09-02T20:06:19.740 回答
0

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

于 2008-09-02T20:10:06.847 回答
0

什么语言/框架?

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

http = httplib2.Http()
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode(''))
于 2008-09-02T20:10:10.963 回答
0

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

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

不过暂时想不起来了……我一会儿查一下……

于 2008-09-02T20:13:17.743 回答
0

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

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

<html>

<头部>

&lt; script language="javascript"&gt;

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);

}
&lt; script / &gt;

</head> <body> <form> <input type="button" value="点击我" OnClick="SendRequest();" /> </form> </body> </html>


CheckHeader.aspx

使用系统;

使用 System.Web;

使用 System.Web.UI;

公共部分类 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();
}

}

伙计..这个html编辑器很烂..或者我不知道如何使用它...

于 2008-09-02T21:37:46.510 回答
0

我昨天遇到的异常是由于我愚蠢地尝试在已构建页面的标题上写字引起的。

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

现在我正在使用 WebRequest 对象,如@sectrean 所示的示例,here

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

于 2008-09-03T14:44:47.430 回答