所以我是一名ASP.NET開發人員。首先,我想這:以更好的方式瞭解POST和GET的細微差別
$.getJSON('/Admin/GetPrelimsByJob/109', function (data) {
var template = $('#optionTemplate').html();
var html = Mustache.to_html(template, data);
$('#sampleArea').html(html);
});
用的控制器方法簽名:
[HttpGet]
public JsonResult GetPrelimsByJob(int jobId)
我的第一個錯誤是,ID沒有被解析並通過ASP.NET引擎發現。
出於測試目的,我向後退了一步,並停止通過一個id:
$.getJSON('/Admin/GetPrelimsByJob', function (data) {
var template = $('#optionTemplate').html();
var html = Mustache.to_html(template, data);
$('#sampleArea').html(html);
});
隨着控制器簽名; [HTTPGET] 公共JsonResult GetPrelimsByJob()
我的第二個錯誤是: 該請求已被阻止,因爲敏感信息可能被泄露給第三方網站時,該GET請求中被使用。要允許GET請求,請將JsonRequestBehavior設置爲AllowGet。
我明白我可以設置JsonRequestBehavior來解決這個問題,但爲什麼這是一個問題,爲什麼我的響應與我做POST請求不同。
最後,得到的東西的工作我做:
$.postJSON('/Admin/GetPrelimsByJob', { jobId: 109 }, function (data) {
var template = $('#optionTemplate').html();
var html = Mustache.to_html(template, data);
$('#sampleArea').html(html);
});
凡我控制器的簽名是:
[HttpPost]
public JsonResult GetPrelimsByJob(int jobId)
而且在我的jQuery的擴展名是:
$.postJSON('/Admin/GetPrelimsByJob', { jobId: 109 }, function (data) {
var template = $('#optionTemplate').html();
var html = Mustache.to_html(template, data);
$('#sampleArea').html(html);
});
我如果我切換到POST請求,我知道我會使所有的工作,但我想知道爲什麼。
所以回顧一下: 1)爲什麼我的id沒有通過GET請求傳遞id時被ASP.NET引擎解析。
2)爲什麼我必須將JsonRequestBehavior設置爲AllowGet才能讓我的請求允許JSON數據在響應中。
3)爲什麼POST只是在這種情況下工作,我得到的數據,似乎RESTful HTTP動作動詞GET應該是合適的選擇。並不是說我試圖嚴格遵守REST。
你能否提供更多關於你得到的錯誤的細節1)你的路由配置也會得心應手... – miensol