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
하고, 요청에 몇 가지 사용자 정의 헤더를 추가 해야하는 프리 플라이트 검사를 발생합니다.
따라서 두 가지 가능한 솔루션이 있습니다.
OPTIONS
API 프로젝트에서 처리를 구현합니다 .지원 OPTIONS
이 더 나은 솔루션 일 가능성이 높 으므로 결국 그렇게 할 가능성이 있지만 AppInsights를 제거하는 것이 더 빠르기 때문에 지금은 그렇게하고 있습니다. 내 관점 에서 <script>
시작된 태그를 제거 하고 문제를 해결했습니다.var appInsights = window.appInsights...
_Layout.cshtml
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다