Khi tôi có mã này
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
trong Fiddler, tôi có thể thấy yêu cầu thô sau đây
POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache
name=norm
Nhưng những gì tôi đang cố gắng là đặt loại nội dung từ application / x-www-form-urlencoded thành application / json . Nhưng mã này
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Tạo yêu cầu lạ (tôi có thể thấy trong Fiddler)
OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
Tại sao vậy? OPTIONS là gì khi nó nên được ĐĂNG ở đó? Và loại nội dung của tôi được đặt thành application / json ở đâu? Và các tham số yêu cầu đã biến mất vì một số lý do.
CẬP NHẬT 1
Về phía máy chủ, tôi có dịch vụ RESTful thực sự đơn giản.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Nhưng vì một số lý do mà tôi không thể gọi phương thức này với các tham số.
CẬP NHẬT 2
Xin lỗi vì đã không trả lời quá lâu.
Tôi đã thêm các tiêu đề này vào phản hồi máy chủ của mình
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Nó không giúp được gì, tôi gặp lỗi Phương pháp không được phép từ máy chủ.
Đây là những gì người chơi của tôi nói
Vì vậy, bây giờ tôi có thể chắc chắn rằng máy chủ của mình chấp nhận POST, GET, OPTIONS (nếu tiêu đề phản hồi hoạt động như tôi mong đợi). Nhưng tại sao "Phương pháp không được phép"?
Trong phản hồi WebView từ máy chủ (bạn có thể thấy phản hồi thô trên hình trên) trông như thế này