这适用于所有客户而非IE。
var xml = "[XMLDOC]";
$.ajax({
type: "PUT",
contentType: "multipart-form",
url: "tar-url.com",
headers: {Authorization: "Basic herpderp="},
data: xml
success: function(){console.log("success");},
error: function(){console.log("error");}
});
这是我通常做的请求。它以我的旧格式工作,但有一个故障,它在IE9中不起作用,所以我想出了这个绝妙的主意;让我的服务器执行此操作,而不是浏览器。
我创建了一个通用处理程序: gHand.ashx ,它允许我执行我的调用。
我为其他一些调用执行此操作,但它是简单的GET请求,它返回一些JSON。这是我需要帮助的地方。
我在C#中创建我的方法:
public void ProcessRequest(HttpContext context)
{
WebClient wsb = new WebClient();
//pass *tar-url.com here*.
string url = context.Request.QueryString["url"];
//pass contentType here.
string ct = context.Request.QueryString["contextType"];
string type = context.Request.QueryString["type"];
string headers = context.Request.QueryString["headers"];
//not sure how to access the xml?
// something like this?
string xml = context.Request.QueryString["save"];
//HERE I NEED TO ASSIGN REST OF STUFF TO *wsg*
string response = wsb.DownloadString(url);
context.Response.Write(response);
}
我如何在javascript中调用它:
$.ajax({
url:"gHand.ashx",
type: "get",
data: JSON.stringify({
save: xml,
type: "PUT",
url: "tar-url.com",
contentType: "multipart/form",
headers:{ Authorization: "Basic HerpDerp="}
}),
success: function(){...},
error: function(){...}
});
我的调用似乎都是正确的,因为我可以构建一个WebClient并执行类似的脚本,但似乎这个特殊的设置让我难以理解。
编辑:有人有任何想法吗?
答案 0 :(得分:0)
当您将数据发送到服务器时,您需要对其进行解码。
示例:
您正在发送以下地图:
{
save:xml,
url: url,
type:type,
contenType: ct,
headers:{...}
}
所以你可以看一下并说出来,就像它说的那样:
string url = context.Request.QueryString["url"];
正常进行。您的REQUEST TYPE是您应该检查的最后一件事,因为它确定您的WebClient对象将如何反应。
由于数据将被保存,而不是你做
wsb.DownloadString(url);
或多或少是一个获取请求,您可能希望执行以下操作:
wsb.uploadString(URL, METHOD, DATA);
因为您正在推送XML DOC,或者:
wsb.uploadData(URL, METHOD, DATA);
如果您要上传图片。
来源:http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx
分配变量的顺序无关紧要,但是当您调用uploadData时,它正在执行webclient请求。没有wsb.execute()命令。