这是一个奇怪的事情:我正在尝试通过HttpWebRequest将数据发送到Coldfusion Web服务(也尝试使用HttpClient),并且我总是得到一个“登录页面”作为响应。
但是,如果我做与Ajax Post相同的事情,那就可以了。
BUT²,如果我在Ajax调用中将content-type设置为“application / json”,它也会返回登录页面。
Web服务管理员说该服务不需要登录,因为我们使用VPN来调用它。但是,如果我尝试通过浏览器访问webservice 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的Header中放入一些重要的数据?此外:Coldfusion的Web服务授权配置中存在一些问题?
答案 0 :(得分:0)
您可能需要将methodname移动到url而不是作为post param传递。
在AJAX调用的Javascript中:
url: "http://url.cfc?method=MethodName"
并在C#中:
var request = HttpWebRequest.Create("http://url.cfc?method=MethodName");