เมื่อฉันมีรหัสนี้
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
ใน Fiddler ฉันเห็นตามคำขอดิบ
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
แต่สิ่งที่ฉันพยายามคือการกำหนดประเภทเนื้อหาจากแอพลิเคชัน / x-www ฟอร์ม urlencodedจะapplication / JSON แต่รหัสนี้
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
สร้างคำขอแปลก ๆ (ซึ่งฉันเห็นใน 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
ทำไมถึงเป็นเช่นนั้น? OPTIONS คืออะไรเมื่อควรโพสต์ที่นั่น? และประเภทเนื้อหาของฉันถูกตั้งค่าเป็น application / json ที่ไหน และพารามิเตอร์การร้องขอหายไปด้วยเหตุผลบางประการ
อัปเดต 1
ในฝั่งเซิร์ฟเวอร์ฉันมีบริการ RESTful ที่เรียบง่ายจริงๆ
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
แต่ด้วยเหตุผลบางประการฉันไม่สามารถเรียกวิธีนี้ด้วยพารามิเตอร์ได้
อัปเดต 2
ขออภัยที่ไม่ได้ตอบนาน
ฉันได้เพิ่มส่วนหัวเหล่านี้ในการตอบกลับของเซิร์ฟเวอร์แล้ว
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
ไม่ได้ช่วยฉันมีข้อผิดพลาดวิธีที่ไม่อนุญาตจากเซิร์ฟเวอร์
นี่คือสิ่งที่นักเล่นซอของฉันพูด
ดังนั้นตอนนี้ฉันมั่นใจได้ว่าเซิร์ฟเวอร์ของฉันยอมรับPOST, GET, OPTIONS (หากส่วนหัวการตอบกลับทำงานอย่างที่ฉันคาดหวัง) แต่ทำไม "วิธีการไม่อนุญาต"?
ในการตอบสนอง WebView จากเซิร์ฟเวอร์ (คุณสามารถดูการตอบสนองแบบRawในภาพด้านบน) จะมีลักษณะดังนี้