API Web ASP.NET - Không được phép động từ PUT & DELETE - IIS 8


145

Gần đây tôi đã nâng cấp từ Visual Studio 2010 lên Visual Studio 2012 RC. Trình cài đặt cũng cài đặt IIS 8 Express mà Visual Studio hiện sử dụng làm máy chủ web mặc định.

IIS 8 đang chặn các yêu cầu API WEB của tôi sử dụng các động từ PUT VÀ DELETE. IIS trả về lỗi 405 , The requested resource does not support http method 'PUT'.

Tôi biết mọi người có vấn đề với điều này trong quá khứ và có một số thông báo về nó trên Stack Overflow. Với IIS 7 Express, giải pháp là gỡ cài đặt WebDav. Thật không may, tôi không thấy cách nào để làm điều đó với IIS 8.

Tôi đã thử chỉnh sửa các phần WebDav từ applicationationhost.config nhưng không được. Ví dụ tôi loại bỏ <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />khỏi tập tin cấu hình.

Tôi đã dành quá nhiều thời gian cho việc này. Có phải là một cách đơn giản để kích hoạt PUT và XÓA?


Điều này vẫn bị hỏng trong phiên bản RTM. Chỉ lãng phí 3 giờ cho việc này ... Tất cả những gì cần thiết là thêm các động từ phụ vào ExtensionlessUrl-Integrated-4.0.
leppie

1
Tôi không nghĩ rằng điều này bị hỏng nhưng là do thiết kế. Tôi nghĩ rằng việc thay đổi hành vi mặc định sẽ can thiệp vào WebDAV và phá vỡ tính tương thích ngược. Điều này cũng không hoạt động với IIS7 khi WebDAV được cài đặt.
Đánh dấu

Tôi cũng chỉ lãng phí 3 giờ cho việc này ... 6 năm sau bài đăng này.
Brian Jenkins

Câu trả lời:


162

Được chứ. Cuối cùng tôi đã đến đáy của điều này. Bạn cần phải nhảy qua một số vòng để các động từ PUT và DELETE hoạt động chính xác với IIS8. Trong thực tế, nếu bạn cài đặt ứng cử viên phát hành của VS 2012 và tạo dự án API WEB mới, bạn sẽ thấy rằng các phương thức PUT và DELETE mẫu trả về lỗi 404 ra khỏi hộp.

Để sử dụng các động từ PUT và DELETE với API Web, bạn cần chỉnh sửa% userprofile% \ Documents \ iothypress \ config \ applicationationhost.config và thêm các động từ vào trình xử lý ExtensionlessUrl như sau:

Thay đổi dòng này:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

đến:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Ngoài những điều trên, bạn nên đảm bảo WebDAV không can thiệp vào các yêu cầu của bạn. Điều này có thể được thực hiện bằng cách bình luận các dòng sau từ applicationationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Ngoài ra, hãy lưu ý rằng quy ước API Web mặc định là tên phương thức của bạn phải giống với động từ HTTP được gọi. Ví dụ: nếu bạn đang gửi yêu cầu xóa HTTP, phương thức của bạn, theo mặc định, nên được đặt tên là Xóa.


9
Đối với các vấn đề tương tự với động từ TÙY CHỌN trên IIS8 (trong đó có một thứ khác đang chặn trước trình xử lý của bạn) hãy thử <remove name = "OPTIONSVerbHandler" /> trong web.config. Đối với vấn đề đó, tôi sẽ khuyên bạn nên sử dụng kỹ thuật "xóa" trong web.config cục bộ của bạn qua việc gây rối với ứng dụngatioationhost.config khi có thể như một quy tắc chung
Jason

7
Thay vì xóa WebDAV ở cấp máy chủ có thể gây ra hiệu ứng kích hoạt, tốt hơn hết là xóa nó khỏi dự án của bạn như được hiển thị ở đây: stackoverflow.com/a/14465655/428280
Twisted

Và rồi chuyện gì xảy ra? Thậm chí có thể nó sẽ hoạt động tại địa phương nhưng sẽ không hoạt động trên Azure
Bộ công cụ

3
Câu trả lời hướng dẫn sửa đổi cài đặt hệ thống, ngay cả trên máy dev, không thể là câu trả lời. Điều này giải quyết một triệu chứng và không thực sự giúp ích cho các đội và sản xuất. Bạn sẽ nhân rộng điều này trên mỗi máy? Kiểm tra câu trả lời của Santosh Sah.
André Werlang 04/05/2015

Ngoài ra, tôi cũng cần xóa WebDAVModulephần mô-đun, theo câu trả lời của Santosh Sah .
Ivaylo Slavov

125

Thay đổi tệp Web.Config của bạn như dưới đây. Nó sẽ hành động như quyến rũ.

Trong nút <system.webServer>thêm phần dưới mã

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Sau khi thêm, Web.Config của bạn sẽ trông như dưới đây

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

3
Xóa WebDavModule là cách chính xác để khắc phục vấn đề này.
MissRaphie

6
Đã lưu ngày của tôi: <mô-đun run ALLManagedModulesFor ALLRequests = "true"> <remove name = "WebDAVModule" /> </ mô-đun>
Peter Stegnar

3
Tiêu đề tùy chỉnh không cần thiết vì chúng có liên quan đến CORS và theo cách này bạn đang gây ra lỗ hổng bảo mật. Chỉ là phần liên quan WebDAVModulelà có liên quan.
André Werlang 04/05/2015

2
Câu trả lời này đúng với ngoại lệ duy nhất là tên trình xử lý có thể khác nhau giữa các phiên bản IIS - ví dụ 7.5 sử dụng "ExtensionlessUrlHandler-Integrated-4.0"(như trong câu trả lời ở trên) trong khi IIS 8.5 được đổi tên thành "ExtensionlessUrl-Integrated-4.0"(cũng được Mark S. đề cập đến tên của trình xử lý trang lỗi IIS, một khi bạn nhận được lỗi, vì vậy sẽ rất đơn giản để biết nên đặt cái nào. Tôi sử dụng cả hai tên để hỗ trợ các môi trường lưu trữ khác nhau.
Ivaylo Slavov

7
Nó làm cho tôi chết một chút bên trong mỗi khi tôi thấy điều này - run ALLManagedModulesFor ALLRequests = "true" - như một giải pháp britishdeveloper.co.uk/2010/06/
Oliver

61

Loại bỏ WebDAV hoạt động hoàn hảo cho trường hợp của tôi:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
       type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

tốt hơn hết là giải quyết vấn đề thông qua web.config thay vì khắc phục sự cố thông qua iis hoặc machine.config để cấp quyền, điều đó sẽ không xảy ra nếu ứng dụng được lưu trữ ở máy khác


Điều này làm việc cho tôi, nơi mà những người khác đã không vì một lý do nào đó (trên IIS 8.5) cảm ơn
John

4
Xóa WebDAVModule làm việc cho tôi, không cần xóa trình xử lý WebDAV (IIS 8.0).
PeterS 30/03/2016

3
chỉ cần gỡ bỏ webdav hoạt động trên khung 4.6.2 iis8.5
Abdul Rehman đã nói

45

Cập nhật web.config của bạn

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/bloss/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

Loại bỏ sự cần thiết phải sửa đổi cấu hình máy chủ của bạn.


1
Tôi đã được viết dòng khác nhưng nó không hoạt động. sau khi thêm dòng <remove name = "WebDAVModule" /> và <remove name = "WebDAV" /> nó hiện đang hoạt động. Cảm ơn rất nhiều & 1 phiếu bầu từ phía tôi.
Banketeshvar Naraya

Điều này hoạt động, nhưng có thể không thành công do khóa cấu hình ngăn chặn việc sử dụng <mô-đun> trong web.config. Trong trường hợp này, bạn phải vô hiệu hóa khóa cấu hình trong apphost.config. Nếu bạn không có quyền kiểm soát apphost.config vì một số lý do, thì phương pháp này không thể được sử dụng.
Mùa đông mùa đông

Đã làm việc với IIS10, mặc dù tôi chỉ sử dụng "*" làm động từ
Javier G.

1
Đã làm việc với IIS 10 và API Web 2. Đã hoạt động, tôi nên thêm, sau hàng tá "giải pháp" khác mà tôi thấy trên mạng không có. Cảm ơn!
Matt West

@ChrisMarisic: Điều này làm việc như một cơ duyên cho tôi cảm ơn!
Div Tiwari

18

Trong API Web Asp.Net - webconfig. Điều này hoạt động trong tất cả các trình duyệt.

Thêm mã sau vào bên trong thẻ System.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Thay thế thẻ system.webserver của bạn bằng mã bên dưới

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


Tôi đã gặp sự cố này trong IIS 7.5 và bản sửa lỗi này đã hoạt động hoàn hảo. Thay vì xóa tất cả nội dung system.webserver của tôi, tôi chỉ hợp nhất các cài đặt có liên quan ở trên vào cài đặt của riêng tôi.
Keith Walton

38
THẬN TRỌNG : Phần tiêu đề tùy chỉnh trong đoạn mã trên cho phép BẤT K site trang web nào gọi API của bạn từ trình duyệt - đây là một rủi ro bảo mật lớn . Đọc trên CORS, đây là những gì các tiêu đề đang kích hoạt.
profMamba

Cũng có vấn đề này trên iis 7.5 và điều này đã làm việc. Hãy chắc chắn đọc thông điệp của Bộ công cụ ở trên về rủi ro liên quan đến việc mở cors cho mọi người. Cũng nêu lên nhận xét của mình vì những mẩu tin như thế rất có giá trị.
sjdirect

Tôi không nghĩ bạn cần tiêu đề tùy chỉnh trong trường hợp này. Phần còn lại của system.webserverphần nên đủ - chỉ cần đảm bảo bạn có tên đúng cho trình xử lý url không mở rộng.
Ivaylo Slavov

1
@niico Bạn chỉ nên cho phép các trang web đáng tin cậy truy cập Control-Control-Allow-Origin, tức là thay thế "*" bằng URL trang web của bạn. Khách sạn này là một danh sách trắng của tất cả các trang web đáng tin cậy, trừ khi bạn muốn tin tưởng toàn bộ web (thường là một ý tưởng tồi).
profMamba

5

điều này làm việc cho tôi trên iis8 cùng với một số câu trả lời khác. Lỗi của tôi là 404.6

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

khi bạn chạy AppCmd, đây là những gì được đặt trong web.Config của bạn (ngoại trừ bit applicationToWebDAV).
Chase Florell

5

Chỉ cần cập nhật nhanh cho bất kỳ ai khác có thể gặp phải vấn đề này. Kể từ hôm nay, việc thay đổi% userprofile% \ Documents \ iothypress \ config \ applicationationhost.config không hoạt động nữa (điều này vẫn hoạt động tốt cho đến bây giờ, không chắc đây có phải là do cập nhật Windows không). Sau nhiều giờ thất vọng, tôi đã thay đổi web.config để thêm các trình xử lý này vào system.webserver để làm cho nó hoạt động:

<handlers>
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

        <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

4

Kích hoạt CORS (đẹp và gọn gàng)

1.Thêm gói nuget CORS

Install-Package microsoft.aspnet.webapi.cors

2. trong tệp WebApiConfig.cs để Đăng ký phương thức thêm mã dưới đây:

config.EnableCors();

ví dụ:
sử dụng System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3.Thêm mã dưới đây vào không gian tên của bộ điều khiển bao gồm get, post, xóa, đặt hoặc bất kỳ phương thức http nào

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

Ví dụ:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

tham khảo: http://www.asp.net/web-api/overview/security/eneac-cross-origin-requests-in-web-api


4

Sau khi không có gì hoạt động, tôi đã có thể giải quyết điều này bằng các bước dưới đây:

• Không chọn cài đặt IIS 'WEB DAV PUBOUNDING', trong khi cài đặt IIS. • INETMGR - Trang web mặc định - Lọc yêu cầu - Động từ HTTP - PUT là đúng


3

Sau khi tìm kiếm vô tận và thử các câu trả lời đã được cung cấp (thêm các động từ PUT, XÓA và xóa WEBdav), nó vẫn không hoạt động.

Tôi đã đi đến cài đặt ghi nhật ký IIS:> Xem tệp nhật ký. Trong trường hợp của tôi, W3SVC4 là thư mục có ngày mới nhất, mở thư mục, tra cứu tệp nhật ký mới nhất và thấy mục này: GET / Rejection-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

Phương pháp Cập nhật được liệt kê với động từ GET, lạ phải không? Vì vậy, tôi đã tìm kiếm Rejection-By-UrlScan và tìm thấy liên kết này: UrlScan Broke My Blog .

Tôi đã đi đến đây:% Windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

Về cơ bản, UrlScan đã chặn các động từ PUT và DELETE. Tôi đã mở tệp INI này, thêm PUT và XÓA vào AllowVerbs và xóa chúng khỏi danh sách DenyVerbs. Tôi đã lưu tệp INI và nó đã hoạt động! Vì vậy, đối với tôi, các bước này là cần thiết bên cạnh các gợi ý của ExtensionlessUrlHandler.

Máy chủ web Windows 2008 R2 (64 bit), IIS 7.5. Tôi đang sử dụng kết hợp với WebAPI DotNetNuke (DNN). ASP.Net 4.0 Phương pháp cập nhật của tôi:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)

3

Đối với PHP, nó chỉ đơn giản là:

  1. Mở IIS
  2. Chuyển đến Handler Mappings
  3. nhấp vào chỉnh sửa trên php5.6.x hoặc php7.0.x
  4. nhấp vào "hạn chế yêu cầu"
  5. trong tab động từ, chọn "một trong các động từ sau" và thêm "GET, Head, POST, PUT, PATCH, DELETE, OPTION"

Tôi tưởng tượng điều này sẽ làm việc với những người xử lý khác quá.


2

Bên cạnh tất cả các giải pháp trên, hãy kiểm tra xem bạn có " id " hoặc bất kỳ tham số được xác định tùy chỉnh nào trong phương thức DELETE phù hợp với cấu hình tuyến đường hay không.

public void Delete(int id)
{
 //some code here
}

Nếu bạn gặp lỗi lặp lại 405, tốt hơn là đặt lại chữ ký phương thức về mặc định như trên và thử.

Cấu hình tuyến theo mặc định sẽ tìm id trong URL. Vì vậy, id tên tham số rất quan trọng ở đây trừ khi bạn thay đổi cấu hình tuyến đường trong thư mục App_Start .

Bạn có thể thay đổi kiểu dữ liệu của id mặc dù.

Ví dụ, phương pháp dưới đây sẽ hoạt động tốt:

public void Delete(string id)
{
 //some code here
}

Lưu ý: Cũng đảm bảo rằng bạn chuyển dữ liệu qua url chứ không phải phương thức dữ liệu sẽ mang tải trọng dưới dạng nội dung.

DELETE http://{url}/{action}/{id}

Thí dụ:

DELETE http://localhost/item/1

Hy vọng nó giúp.


2

Tôi đã đối mặt với cùng một vấn đề với bạn, sau đó giải quyết nó, Đây là giải pháp, tôi ước nó có thể giúp
Đầu tiên

Trong modulesCấu hình IIS , lặp lại WebDAVModule , nếu máy chủ web của bạn có nó, sau đó loại bỏ nó

Thứ hai

Trong handler mappingscấu hình IIS , bạn có thể thấy danh sách trình xử lý kích hoạt, để chọn the PHP item, chỉnh sửa nó, trên trang chỉnh sửa, nhấp vào nút hạn chế yêu cầu, sau đó chọn the verbs tabtrong phương thức, trong chỉ định các động từ sẽ xử lý nhãn, kiểm traall verbs radio , sau đó nhấp vào ok, bạn cũng có thể thấy một cảnh báo, nó cho chúng ta thấy rằng sử dụng dấu ngoặc kép để thực thi PHP-CGI, sau đó thực hiện nó

Nếu làm xong, sau đó khởi động lại máy chủ IIS, nó sẽ ổn

nhập mô tả hình ảnh ở đây


1
Tôi chỉ xóa WebDAVModule khỏi trang web IIS và nó hoạt động với tôi
Umair Malhi

1

Tôi không chắc chắn nếu bạn đã chỉnh sửa tập tin cấu hình đúng. Hãy thử các bước sau

  1. mở% userprofile% \ ducument \ iothypress \ config \ applicationationhost.config

  2. Theo mặc định, các mục đã cho dưới đây được nhận xét trong tệp applicationationhost.config. uncomment những mục này.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

4
gây rối với applicationationhost.config? không
Bộ công cụ

Không nên lộn xộn với tập tin cấu hình ứng dụng. Trước tiên, bạn sẽ làm điều này cho toàn bộ máy chủ và quên đi, sau đó nhiều người sẽ tự hỏi làm thế nào nó hoạt động trên máy này và không hoạt động trên phần còn lại. Ngoài ra, nếu bạn không được phép truy cập vào tệp cấu hình IIS trên máy chủ nơi ứng dụng được lưu trữ, bạn sẽ phải xử lý nó trong web.config. Hãy tưởng tượng máy chủ dev của bạn có bản cập nhật ở trên, liệu web.config của bạn có chính xác không? Đó là một cách tuyệt vời để mất một ngày của ai đó để điều tra lý do tại sao việc triển khai sản xuất thất bại
Ivaylo Slavov

1

Đây là cách bạn cho phép các Động từ HTTP bổ sung sử dụng GUI của Trình quản lý IIS.

  1. Trong IIS Manager, chọn trang web bạn muốn cho phép PUT hoặc DELETE cho.

  2. Nhấp vào tùy chọn "Yêu cầu lọc". Nhấp vào tab "Động từ HTTP".

  3. Nhấp vào liên kết "Cho phép động từ ..." trong thanh bên.

  4. Trong hộp xuất hiện gõ "XÓA", bấm OK.

  5. Nhấp vào liên kết "Cho phép động từ ..." trong thanh bên một lần nữa.

  6. Trong hộp xuất hiện gõ "PUT", bấm OK.


cố gắng tốt - một cái gì đó khác nhau cho một lần - nhưng vẫn không hoạt động!
ozzy432836

Tôi đã thử mọi thứ khác mà tôi thấy được đề xuất trên SO và các nơi khác. Cuối cùng tôi đã thử điều này và nó hoạt động hoàn hảo. Trong trường hợp của tôi, các động từ PUT và DELETE đã có trong danh sách và trước tiên tôi phải xóa chúng, sau đó thêm chúng trở lại bằng liên kết Cho phép động từ ... nhưng vẫn hoạt động khi không có gì khác. Cảm ơn bạn rất nhiều!
JTennessen

1

Tôi đang sử dụng tệp ashx trong ứng dụng MVC và không có câu trả lời nào ở trên hoạt động với tôi. IIS 10.

Đây là những gì đã làm việc. Thay vì thay đổi " ExtensionlessUrl-Integration-4.0 " trong IIS hoặc web.config tôi đã thay đổi " SimpleHandlerFactory-Integration-4.0 " cho các tệp " * .ashx ":

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

0

Một lý do khác có thể là như sau:
Tôi đã thay đổi phương pháp Url cho Web Api theo câu trả lời này :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Nhưng phương pháp này tạo ra liên kết như:

/api/MyApiCtrl?action=MyAction

Điều này hoạt động chính xác với các yêu cầu GET và POST nhưng không phải với PUT hoặc DELETE.
Vì vậy, tôi chỉ cần thay thế nó bằng:

/api/MyApiCtrl

và nó đã khắc phục vấn đề.


0

Trong IIS 8.5 / Windows 2012R2, không có gì được đề cập ở đây làm việc cho tôi. Tôi không biết ý nghĩa của việc xóa WebDAV là gì nhưng điều đó không giải quyết được vấn đề cho tôi.

Điều giúp tôi là các bước dưới đây;

  1. Tôi đã đi đến trình quản lý IIS.
  2. Trong bảng điều khiển bên trái đã chọn trang web.
  3. Trong vùng làm việc bên trái, đã chọn WebDAV, Mở nó bằng cách nhấp đúp.
  4. Trong bảng điều khiển bên phải nhất, vô hiệu hóa nó.

Bây giờ mọi thứ đang làm việc.


-1

Bạn có thể chuyển đổi phương thức Xóa của mình dưới dạng POST dưới dạng;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.