说我有以下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();
答案 0 :(得分:2)
这里的问题是你的GET请求中有一个正文。以下是解决您问题的两种解决方案:
将您的请求类型更改为POST
而不是GET
(type: "POST"
)
删除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();