放置和删除方法适用于集成管道模式,但不适用于我的服务器上的经典模式

问题描述 投票:0回答:1

我有一个 Web API 应用程序,当部署在 IIS 服务器中时,单独使用 PUT 和 DELETE 方法不起作用。但在本地运行良好。

当我尝试对各种选项进行更多调查时,例如禁用 WebDAV 模块和在处理程序中添加动词。对我来说没有任何作用。当我将应用程序池的托管管道模式从经典更改为集成时,它工作正常。

但是我的客户端服务器必须是经典的,所有其他遗留应用程序才能工作。有什么解决办法吗?

我们使用的是 IIS-10,而我的不是 .net core 应用程序。它的.net框架4.5应用程序。

我的 Web.config 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <connectionStrings>
    <add name="DBConnection" connectionString="*****" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <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>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
      
    </assemblyBinding>
  </runtime>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
</configuration>

put iis-10 http-delete integrated-pipeline-mode
1个回答
0
投票

我有一个 Web API 应用程序,当部署在 IIS 服务器中时,单独使用 PUT 和 DELETE 方法不起作用。但在本地运行良好。

描述中“不起作用”是什么意思?具体的错误信息和错误代码(子状态代码)是什么?我对此问题进行了一些搜索,发现这两种情况与您的问题类似:“405方法不允许”和“500内部服务器错误”。

您提到您尝试禁用 WebDAV 模块并在处理程序中添加动词。确保配置正确,如下所示:

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

根据您的尝试,我认为您的问题更像是第二种情况(500错误)。你可以尝试这个配置(在

modules element
):

runManagedModulesForWebDavRequests="true"

关于

<modules element>
这个属性的更多细节,请参考官方文档:https://learn.microsoft.com/en-us/iis/configuration/system.webserver/modules/#attributes

© www.soinside.com 2019 - 2024. All rights reserved.