我正在寫一個MVC應用程序,我驚呆了,知道我可以在我的控制器中執行Request.isAJAXRequest()並返回JSONResult(如果它是AJAX),或者返回常規HTML Razor視圖(如果不是)。ASP.NET如何知道請求是否是AJAX?
這是非常有用的,但我想知道這實際上是如何工作的。標題中是否有指定它爲AJAX的內容?
這是我從IE開發人員工具中獲取的AJAX POST的請求標頭。
我正在寫一個MVC應用程序,我驚呆了,知道我可以在我的控制器中執行Request.isAJAXRequest()並返回JSONResult(如果它是AJAX),或者返回常規HTML Razor視圖(如果不是)。ASP.NET如何知道請求是否是AJAX?
這是非常有用的,但我想知道這實際上是如何工作的。標題中是否有指定它爲AJAX的內容?
這是我從IE開發人員工具中獲取的AJAX POST的請求標頭。
是的,稱爲X-Requested-With
頭告訴XMLHttpRequest
是用來製造該請求(即阿賈克斯)服務器。
這是X-Requested-With標頭請求標頭。
,並因爲頭可以去除或改變它不是一個完整的,保證的解決方案來檢測AJAX電話。
更新:
在您的情況(回到正確的格式客戶端),另一種可能是檢查接受頭。它可能是json,xml,html或other things。基於此你可以決定返回什麼。
「完整的,防錯的」解決方案是什麼? – matrixugly
我認爲我應該使用保證而不是防錯。無論如何,我不能說有任何。我說的是一個普遍的問題。請求標頭可以很容易地被操縱,所以不能保證你的方法收到的是一個ajax調用。 –
它就在那裏:'X-Requested-With:XMLHttpRequest' – pawel
「X-Requested-With」請求還有哪些「種類」? – matrixugly
X-'前綴已經被保留用於非標準的頭文件(例如:你可以自己編寫),但是其中一些已經成爲標準,現在不再是這種情況了。 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Common_non-standard_request_headers – pawel