zoukankan      html  css  js  c++  java
  • Asp.Net Core IIS发布后PUT、DELETE请求错误405.0

    一、在使用Asp.net WebAPI 或Asp.Net Core WebAPI 时 ,如果使用了Delete请求谓词,本地生产环境正常,线上发布环境报错。

    服务器返回405,请求谓词无效。

    二、问题分析诊断

    首先检查跨域配置是没有问题的,查询数据和新增数据的请求也是没有问题的,只出现在修改和删除数据。通过了解ABP Web API请求头设置,查询是GET请求,新增是POST请求,而修改是PUT请求,删除是DELETE请求,IIS服务通常都是支持get和post请求的,由此分析推断很有可能是IIS不支持put和delete谓词请求。

    通过百度了一遍对IIS进行新添加谓词put和delete。 点击部署应用 -> 出来程序映射 –> aspNetCore(由于我部署是.Net Core 程序,所以选择AspNetCoreModule模块)

     

    双击打开

    通过检查,aspNetCore本身是支持全部谓词的,现在肯定是和这个谓词有关,但需要更详细的错误信息。

    既然不错信息是跨域,我们先排除跨域因数的影响,现在看到的跨域错误信息很有可能是个假象,我们通过swagger对web API进行调试。

    调试需要配置授权token,请参考博客:http://www.cnblogs.com/donaldtdz/p/7892865.html

    先测试接口:/api/services/app/User/GetAll

     

    测试结果:通过 200

     

    再测试接口:/api/services/app/User/Delete

     

    测试结果:

    HTTP 错误 405.0 - Method Not Allowed

    无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)。

     

    将response body 用保存用浏览器打开如下:

     

    查看详细错误信息,我们开始的推断是没有问题的,最后也尝试了很多方法,最终问题核心在于 模块WebDAVModule

    三、解决方案1 (这种方式针对当前服务器所有网站,不推荐,因为可能替他网站会使用到WebDAV)

    在启用或关闭Windows功能 –> Internet Information Services 关闭WebDAV发布

     

    四、解决方案2 (针对当前网站,去除WebDav 模块)

    修改,当前Asp.Net Core 发布后的WebConfig

    去除WebDAVModule,

    <modules runAllManagedModulesForAllRequests="true">  
          <remove name="WebDAVModule" />  
        </modules>  
    <configuration>
      <system.webServer>
          <modules runAllManagedModulesForAllRequests="true">  
          <remove name="WebDAVModule" />  
        </modules>  
        <handlers accessPolicy="Read, Script">
                <remove name="WebDAV" />
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet" arguments=".QL.MiniData.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" />
      </system.webServer>
    </configuration>

    这样就可以了。

    更多参考:

    https://www.cnblogs.com/donaldtdz/p/8094300.html

    https://blog.csdn.net/qiujuer/article/details/23827531

    ASP.NET Core中使用Razor视图引擎渲染视图为字符串(转)

    Asp.Net Core 自定义设置Http缓存处理

  • 相关阅读:
    如何正确设置数据库连接池的大小
    spring生命周期
    Spring高级进阶:BeanFactoryPostProcessor
    Spring Bean的生命周期(非常详细)
    表达式求值相关算法
    golang 命令行参数解析 hflag
    golang 标准命令行解析库 flag
    docker consul 环境搭建
    docker etcd 环境搭建
    mysql 事务
  • 原文地址:https://www.cnblogs.com/tianma3798/p/9109215.html
Copyright © 2011-2022 走看看