Development Tip

IIS에서 ASP.NET MVC에 대해 HTTP PUT 및 DELETE를 활성화하려면 어떻게합니까?

yourdevel 2021. 1. 10. 19:39
반응형

IIS에서 ASP.NET MVC에 대해 HTTP PUT 및 DELETE를 활성화하려면 어떻게합니까?


HTTP PUTDELETEASP.NET MVC3 응용 프로그램을 사용합니다. 로컬에서 실행하면 모든 것이 올바르게 작동합니다. 그러나 응용 프로그램을 서버에 게시하면 이러한 방법이 작동하지 않습니다.

웹 서버에서 지원 PUTDELETE요청 을 활성화하기위한 특별한 설정이 있습니까? IIS 7.5에서 공유 호스팅을 사용하고 있습니다.

최신 정보:

에서 활성화 PUT하고 DELETE요청합니다 IIS manager. PUT명령이 잘 작동합니다. 그러나 DELETE여전히 작동하지 않습니다. 요청을 작성합니다 jQuery.

이 페이지에 있습니다.

http://domain.com/dashboard/edit-site/103323/links/

내 ajax 호출은 다음과 같습니다.

$.ajax({
    // url: same as page-url,
    cache: false,
    type: 'DELETE',
    data: { linkid: $(link).data("linkid") },
    beforeSend: function () {
        // doing something in UI
    },
    complete: function () {
        // doing something in UI
    },
    success: function (data) {
        // doing something in UI
    },
    error: function () {
        // doing something in UI
    }
});

이렇게하면 다음과 같은 요청이 생성됩니다.

Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://domain.com
Referer: http://domain.com/dashboard/edit-site/103323/links/
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With: XMLHttpRequest

이것으로 Form Data:

linkid:104044

IIS 관리자의 처리기 매핑 으로 이동합니다 . 찾아서 두 번 클릭하십시오. 클릭 요청 제한을 ... 버튼 동사 탭에서 모두 추가 하고 .ExtensionlessUrlHandler-Integrated-4.0DELETEPUT여기에 이미지 설명 입력


편집 : 가능한 WebDav 게시자 문제

2008 서버에서 실행하던 삭제 된 게시물에 대해 언급 한 적이 있습니까? 제거 시도 의 WebDAV 역할을, 또는 귀하의 사이트에서 비활성화 config:에 system.webServer-> modules섹션 제거 WebDAVModule모듈 :

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

asp.net 웹 API의 프로덕션 환경에서 다음 오류가 발생 PUT하거나 DELETE이러한 방법이 로컬에서 제대로 작동하는 경우.

405-이 페이지에 액세스하는 데 사용되는 http 동사는 허용되지 않습니다.

서버의 web.config에 다음 설정을 추가하기 만하면됩니다.

<system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>

원인 : webDAV 모듈은 기본적으로 PUT / DELETE 메서드를 차단합니다. 따라서 먼저이 모듈과 처리기를 제거하십시오. 먼저 기존 ExtensionlessUrlHandler-Integrated-4.0 설정을 제거하고 원하는 pathverbs.


web.config에 다음 코드 줄을 추가하기 만하면됩니다.

<system.webServer>
 <security>
    <requestFiltering>
        <verbs allowUnlisted="false">
            <add verb="GET" allowed="true" />
            <add verb="POST" allowed="true" />
            <add verb="DELETE" allowed="true" />
            <add verb="PUT" allowed="true" />
        </verbs>
    </requestFiltering>
</security>

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

마침내 나는 대답이 불안정하다는 것을 알았다. 아래에서 jQuery 호출을 tho로 변경했으며 이제 잘 작동합니다.

$.ajax({ 
    url: this.href + "?linkid=" + $(link).data("linkid"), 
    cache: false, 
    type: 'DELETE', 
    // data: { linkid: $(link).data("linkid") }, 
    beforeSend: function () { 
        // doing something in UI 
    }, 
    complete: function () { 
        // doing something in UI 
    }, 
    success: function (data) { 
        // doing something in UI 
    }, 
    error: function () { 
        // doing something in UI 
    } 
});

DELETE전화를 걸 수없는 이유에 대한 설명 Form Data있습니까? 현지에서 잘 작동 했습니까?

참조 URL : https://stackoverflow.com/questions/12440277/how-do-i-enable-http-put-and-delete-for-asp-net-mvc-in-iis

반응형