以编程方式发出GET请求

时间:2014-07-01 15:30:44

标签: c# jquery

说我有以下Jquery请求

   $.ajax({
            type: "GET",
            url: "http://localhost:8501/exampleservice.svc/rest/Start",
            contentType: "application/json; charset=utf-8",
            processData: false,
            data: { confirmationNum : '90210' },
            dataType: "json",
            success: function (data, status, xhr)
            {
            },
            error: function (xhr, status, error)
            {
            },
            complete: function (xhr, status)
            {
            }
        });

在C#中正确使用这种方法的正确方法是什么? 我在数据流中发生错误时尝试了以下操作:

  

“类型'System.Net.ProtocolViolationException'的未处理异常”

string biometricURL = "http://localhost:8501/exampleservice.svc/rest/Start";
byte[] jsonData = new ASCIIEncoding().GetBytes("{ confirmationNum : '90210' }");
WebRequest request;
request = WebRequest.Create(biometricURL);
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = jsonData.Length;
request.Credentials = CredentialCache.DefaultCredentials;

Stream dataStream = request.GetRequestStream();
dataStream.Write(jsonData, 0, jsonData.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)getBiometricCapture.GetResponse();

4 个答案:

答案 0 :(得分:2)

这里的问题是你的GET请求中有一个正文。以下是解决您问题的两种解决方案:

  1. 将您的请求类型更改为POST而不是GETtype: "POST"

  2. 删除contentType: "application/json; charset=utf-8"参数。如果您正在执行ContentType请求,则GET无效。 GET个请求不应具有内容类型,因为它们没有请求实体。

答案 1 :(得分:2)

GET请求没有正文/内容。结果,使用:

Stream dataStream = request.GetRequestStream();
dataStream.Write(jsonData, 0, jsonData.Length);
dataStream.Close();

可能导致" System.Net.ProtocolViolationException"。

如果您想通过GET请求传递自定义数据,请通过QueryString或Headers附加自定义参数。

否则,请改用POST请求。

答案 2 :(得分:1)

正如其他用户已经回答的那样,您不会在内容正文中传递JSON对象以获取GET请求。但是,使用他们建议的post方法不是RESTful,这就是你试图根据示例URL的语义构建的。

在RESTful服务中,使用作为URL路径片段传递的参数实现简单访问器(例外通常是复杂查询,在这种情况下,您在URL或POST中使用查询变量)。对于您来说情况并非如此,因为您通过简单的ID访问。因此,例如,如果您尝试获取ID为12345的BiometricCapture资源,则可以访问该URL:

http://localhost:8501/exampleservice.svc/rest/biocaptures/12345

答案 3 :(得分:0)

将数据作为URL的一部分包含在内。

HttpWebRequest request =   (HttpWebRequest)HttpWebRequest.Create("http://localhost:8501/exampleservice.svc/rest/Start?confirmationNum='90210'");
            request.Method = "GET";
            request.ContentType = "application/json; charset=utf-8";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();