Ketika saya memiliki kode ini
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
di Fiddler saya bisa melihat permintaan mentah berikut
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
Tapi yang saya coba adalah mengatur tipe konten dari application / x-www-form-urlencoded ke application / json . Tapi kode ini
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Menghasilkan permintaan aneh (yang dapat saya lihat di 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
Mengapa demikian? Apa OPTIONS ketika harus POST di sana? Dan di mana tipe konten saya disetel ke application / json? Dan parameter permintaan telah hilang karena beberapa alasan.
UPDATE 1
Di sisi server saya memiliki layanan RESTful yang sangat sederhana.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Tetapi untuk beberapa alasan saya tidak dapat memanggil metode ini dengan parameter.
UPDATE 2
Maaf karena tidak menjawab terlalu lama.
Saya telah menambahkan tajuk ini ke respons server saya
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Itu tidak membantu, saya memiliki Metode tidak diizinkan kesalahan dari server.
Inilah yang dikatakan pemain biola saya
Jadi, sekarang saya bisa yakin bahwa server saya menerima POST, GET, OPTIONS (jika header respons berfungsi seperti yang saya harapkan). Tetapi mengapa "Metode tidak diperbolehkan"?
Dalam WebView respon dari server (Anda bisa melihat respon mentah pada gambar di atas) terlihat seperti ini