asp.net mvc: ajax를 사용하여 페이지 호출 시 탐지하는 방법
asp.net mvc에서 ajax를 사용하여 페이지가 호출될 때 어떻게 감지합니까?
프로페셔널 ASP에 의하면.NET MVC 1.0 북, MVC AJAX 라이브러리는 "XMLHtpRequested-With" 값의 폼 필드를 삽입합니다.
그런 다음 시스템에서 확장 메서드를 사용할 수 있습니다.웹.Mvc는 단순히 전화를 걸 수 있다는 것을 의미합니다.Request.IsAjaxRequest()
그리고 이것이 AJAX 요청이라면 간단한 참말이나 거짓말을 얻을 수 있습니다.
다음과 같이 수동으로 확인할 수 있습니다.
bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest";
또는 ASP의 컨트롤러에 있을 때.시스템을 참조하는 NET MVC.Web.Mvc 다음과 같은 ActionMethod 내에서 액세스할 수 있는 HttpRequestBase 객체에 대한 확장 메서드를 얻을 수 있습니다.
bool isAjaxRequest = Request.IsAjaxRequest();
일반 http 통화이므로 javascript로 통화했는지 브라우저에서 직접 통화했는지 확인할 수 있는 방법은 없습니다.
다른 호출과 구별하기 위해 ajax 호출에 헤더를 추가하거나 ajax 호출에서만 사용되는 쿼리 문자열에 매개 변수를 추가할 수 있습니다.
ASP.NET MVC ajax는 이러한 헤더를 추가합니다.X-Requested-With: XMLHttpRequest
, 이것은 mvc ajax 라이브러리에 의한 ajax 호출임을 스니핑하는 데 사용할 수 있습니다.그러나 jQuery 또는 자신의 핸드롤된 ajax 호출을 사용하는 경우에는 설정되지 않습니다.또한 다른 클라이언트가 이 헤더를 스푸핑(예: WebClient 사용)할 수 있으므로 이 헤더를 찾는 것이 ajax 호출이 이루어졌다는 보장은 아닙니다.
요청이 ajax 요청인지 확인하는 가장 좋은 방법은 확인하는 것입니다.Request.IsAjaxRequest()
. 후드 아래에서 MVC 프레임워크는 Request Parameters OR Request Header에서 ajax request를 확인하는 것이 좋습니다.ASP의 코드입니다.순 MVC 소스 코드는 다음과 같습니다.
public static bool IsAjaxRequest(this HttpRequestBase request) {
if (request == null) {
throw new ArgumentNullException("request");
}
return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
}
따라서 수동으로 확인하려면(권장되지 않음) 두 가지를 모두 확인해야 합니다.
AJAX 호출과 함께 매개 변수를 전달해야 합니다. AJAX는 GET 요청일 뿐이며 주소 표시줄에 url을 입력하고 Enter 키를 누르는 것과 다르지 않습니다(이것이 AJAX가 사이트 간 스크립팅 공격으로부터 보호되어야 하는 이유이며, 그렇지 않으면 공격자는 이미지에 url을 포함하는 것만으로 사용자의 사이트에 AJAX 명령을 실행하도록 강제할 수 있습니다).
그게 왜 중요합니까?그러면 안 됩니다.정말로 콘텐츠 협상을 하려고 하시는 건가요?
언급URL : https://stackoverflow.com/questions/2087021/asp-net-mvc-how-to-detect-when-a-page-is-called-using-ajax
'sourcecode' 카테고리의 다른 글
toad: 오라클 자동 완료 드롭다운 (0) | 2023.09.16 |
---|---|
Python 요소 변환트리에서 문자열로 (0) | 2023.09.16 |
Excel 파일을 열면 "워크북 내용 복구" 메시지 상자가 나타납니다. (0) | 2023.09.16 |
Cent OS 5에서 느린 cronjobs (0) | 2023.09.16 |
mysql join two table, 그리고 0이 아닌 값을 가진 일치하는 레코드의 필드 이름을 가져옵니다. (0) | 2023.09.16 |