내 ASP.NET MVC 사이트의이 AJAX 요청이 프리 플라이트 검사를 트리거하는 이유는 무엇입니까?

스콧 웰던

ASP.NET MVC 5 프로젝트가 있고 페이지 중 하나에 ASP.NET WebApi 프로젝트를 실행하는 서버에서 API를 호출하는 JavaScript가 있습니다. 두 프로젝트는 일반적으로 다른 도메인에서 실행되지만 로컬에서는 localhost. 이 JavaScript는 GET요청을하고 있지만 네트워크 로그를 OPTIONS보면 대신 요청이 생성되고 WebApi는 405 Method Not Authorized.

내 연구에서, 나는 알고 이 때로는 AJAX 호출을위한 트리거되는 "프리 플라이트"체크가 , 내가 알고 ASP.NET WebApi 지원하지 않는 OPTIONS기본적으로 그럼 왜 그러나, (405)를 얻고 있다는 특정 조건이 충족 되고 여기에서 해당 조건 이 충족되면 프리 플라이트 검사를 건너 뜁니다 . 직접보십시오. 다음은 AJAX 요청에 대한 JS 코드의 전체 (익명화)입니다.

var xmlhttp = new XMLHttpRequest();
var url = "http://localhost:12345/api/SomeAction?someArg=" + someArg;

xmlhttp.onreadystatechange = function () {
  if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
    // [snip], process the result here
  }
};

xmlhttp.open("GET", url, true);
xmlhttp.send();

이 간단한 요청이 실행 전 확인을 트리거하는 이유는 무엇입니까?

스콧 웰던

이 문제는 MVC 프로젝트의 Application Insights에서로드 한 일부 추가 JavaScript로 인해 발생했습니다.

xmlhttp.send()디버거 를 사용하여 호출을 시작하여 이것을 발견했으며 결국 ai.0.js. AppInsights에서 해당 파일의 정의를 무시 XMLHttpRequest하고, 요청에 몇 가지 사용자 정의 헤더를 추가 해야하는 프리 플라이트 검사를 발생합니다.

따라서 두 가지 가능한 솔루션이 있습니다.

  1. Application Insights를 비활성화하고 해당 사용자 지정 JavaScript를 제거합니다.
  2. OPTIONSAPI 프로젝트에서 처리를 구현합니다 .

지원 OPTIONS이 더 나은 솔루션가능성이 높 으므로 결국 그렇게 할 가능성이 있지만 AppInsights를 제거하는 것이 더 빠르기 때문에 지금은 그렇게하고 있습니다. 관점 에서 <script>시작된 태그를 제거 하고 문제를 해결했습니다.var appInsights = window.appInsights..._Layout.cshtml

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관