这里有一件奇怪的事情:我试图通过HttpWebRequest将数据发送到Coldfusion Web服务(也尝试使用HttpClient(,我总是得到一个"登录页面"作为响应。
但是,如果我和Ajax Post做同样的事情,它就会起作用。
但是²,如果我在 Ajax 调用中将内容类型作为"application/json",它也返回登录页面。
Web服务管理器说该服务不需要登录,因为我们使用VPN来调用它。但是,如果我尝试通过浏览器访问网络服务 URI,它会打开登录页面。
C# 中的代码:[编辑] 使用 JsonConvert 创建对象
var request = HttpWebRequest.Create("http://url.cfc");
var obj= new
{
method = "MethodName",
data1 = "123456",
data2 = "aaa"
};
string postData = JsonConvert.SerializeObject(obj);
request.Method = "POST";
//request.ContentType = "application/json"; (not using!!!)
using (var writer = new StreamWriter(request .GetRequestStream()))
{
writer.Write(postData );
writer.Flush();
writer.Close();
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
以及 JS 中的代码:
$.ajax({
type: "post",
url: "http://url.cfc",
data: ({
method: "MethodName",
data1: 123456,
data2: "aaa" }),
dataType: "json",
success: function (result) {
console.log(result); },
error: function (result) {
console.log(result); },
});
});
Ajax 调用和 HttpWebRequest 调用之间是否存在实质性差异,可以使用 C# "阻止"请求?或者也许我未能将一些重要数据放入 HttpWebRequest 的标头中?此外:Coldfusion的Web服务授权配置中存在一些问题?
您可能需要将方法名称移动到 url 而不是作为后置参数传递。
在 Javascript 中,在 AJAX 调用中:
url: "http://url.cfc?method=MethodName"
在 C# 中:
var request = HttpWebRequest.Create("http://url.cfc?method=MethodName");