为什么它使用Ajax POST但不使用HttpWebRequest?

时间:2017-08-21 20:47:22

标签: c# ajax web-services coldfusion httpwebrequest

这是一个奇怪的事情:我正在尝试通过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服务授权配置中存在一些问题?

1 个答案:

答案 0 :(得分:0)

您可能需要将methodname移动到url而不是作为post param传递。

在AJAX调用的Javascript中:

url: "http://url.cfc?method=MethodName"

并在C#中:

var request = HttpWebRequest.Create("http://url.cfc?method=MethodName");