有点标题党了,这个异常的现象是这样的:

我有一个正在跑的项目,要对接第三方厂家的设备。  对方给的接口文档,里面有一个接口是需要我这边实现的,要求必须是PUT请求方式。

所以我在项目基础上,新增一个WebAPI的controller类。 实现这个接口,限定请求方式。看起来似乎一切都那么的自然。

但是,用postman做本地调试,一调用就返回404错误!!!

开始我以为是我的WebAPi路由配置有问题,仔细检查了路由,发现没问题。  为了验证,我又写了一个HttpGet请求的接口,用postman调试,这次通了, 说明路由配置是没问题的!!

那么问题出在哪里?我网上搜了搜,大家前篇一律都说是webConfig的配置问题。

说要remove掉WebDAV节点

我按照网上说的,设置了,依然不行!!!!!   404错误还是存在,于是开始了长达两天的自我纠结过程。。。。。。

1.怀疑代码有问题  ——  但是不可能啊,我就写了一个空方法,仅仅是测试是否能监听到请求。 不会存在功能或者逻辑错误 !  pass

2.怀疑WebApiConfig配置问题  ——  这个也不可能,毕竟post、get都可以,只有put不行! pass

3.怀疑RouteConfig配置问题  ——  貌似也不可能。。。! pass

4.怀疑Global.asax配置问题   ——  做了各种尝试,最终也排除了这个地方出问题的可能性! pass

5.怀疑引用类库版本问题  ——  新建了一个WebAPI项目(新项目PUT请求正常),调整我的老项目,类库版本全都跟新项目相同,并且删除掉老项目无关代码。最终排除是类库版本问题!pass

6.怀疑电脑问题  ——  把代码打包给同事,让他在自己电脑上测试,同样404,所以不是电脑问题!pass


最后谜底揭晓:

我最后在比对新项目和老项目的 .csproj 文件和 .csproj .user文件时,发现.csproj .user有一行参数有差异

<IISExpressUseClassicPipelineMode>true</IISExpressUseClassicPipelineMode>

这个参数是用来设置IISExpress的管道模式,true是经典模式,即IIS6之前的那种ISAPI的模式; false是集成模式,是IIS6之后的管道模式!

我发现新项目,这个参数是false,用的是集成模式!

老项目,这个参数是true,用的是经典模式!

我选中老项目的工程,按F4,调出属性设置界面,调整模式为集成模式

然后编译、运行、postman测试。 通了!!!!!!!!!!!!!


后记:

在遇到代码的疑难杂症时,我的最强大招就是代码删减法。 一点一点去除无用代码和非关键参数变量,最后剔除到只剩下最核心的部分。

然后进行详细比对,最后基本都能找到问题根源

C# WebAPI项目,不支持HttpPut请求!!!的更多相关文章

  1. .net webapi项目中支持session

    webapi中默认是不支持session的开启的 需要在Global.asax文件中,添加如下代码 public override void Init() { this.PostAuthenticat ...

  2. 第一个WebAPI项目

    (1)新建一个ASP.NET MVC项目,取名为:MyMvcWebAPIDemo,项目类型选择WebAPI. (2)在Models中新增一个类,取名为:Product,作为我们要测试的实体模型.   ...

  3. Asp.net WebApi 项目示例(增删改查)

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  4. 如何在启用JWT Token授权的.NET Core WebApi项目中下载文件

    背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt To ...

  5. 基于.NET Core 框架搭建WebApi项目

    一 什么是.NET Core? 随着2014年 Xamarin和微软发起.NET基金会,微软在2014年11月份开放.NET框架源代码.在.NET开源基金会的统一规划下诞生了.NET Core .也就 ...

  6. AspNetCore网关集成Swagger访问使用IdentityServer保护的webapi项目

    创建webapi项目 创建四个webapi项目,两个处理业务,一个网关,一个验证中心.四个项目对应的端口如下, ApiGateway:1999 IdentityServer:16690 Service ...

  7. Restful WebApi项目开发实践

    前言 踩过了一段时间的坑,现总结一下,与大家分享,愿与大家一起讨论. Restful WebApi特点 WebApi相较于Asp.Net MVC/WebForm开发的特点就是前后端完全分离,后端使用W ...

  8. [asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的

    一.感慨 很久前看到一篇博客中有句话大致的意思是:“asp.net 程序性能低下的主要原因是开发人员技术参差不齐”,当时看到这句话不以为然,然而时间过的越久接触的.net 开发人员越多就越认同这句话: ...

  9. 使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp

    使用Cors在WebApi中实现跨域请求 第一步,在webapi项目中安装cors 在Web API配置文件中(Global.asax)进行全局配置: public class WebApiAppli ...

随机推荐

  1. LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形). 今天的 ...

  2. 阿里云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?

    阿里云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 见如上链接中视频

  3. Jarvisoj-web phpinfo

    题目入口:http://web.jarvisoj.com:32784/ 一进来就看到源码 简单分析之后知道考点是反序列化,注意到了关键字session_start(),这个函数是用于创建会话.但具体如 ...

  4. 【算法】题目分析:Aggressive Cow (POJ 2456)

    题目信息 作者:不详 链接:http://poj.org/problem?id=2456 来源:PKU JudgeOnline Aggressive cows[1] Time Limit: 1000M ...

  5. Python列表函数和方法

    Python列表函数和方法: 函数: len(列表名): 返回列表长度 # len(列表名): # 返回列表长度 lst = [1,2,3,'a','b','c'] print("lst 列 ...

  6. 如何使用 PHP 语言来编码和解码 JSON 对象

    PHP JSON 本章节我们将为大家介绍如何使用 PHP 语言来编码和解码 JSON 对象. 环境配置 在 php5.2.0 及以上版本已经内置 JSON 扩展. JSON 函数 函数 描述 json ...

  7. HTML <body> 标签

    HTML <body> 标签 实例 一个简单的 HTML 文档,包含尽可能少的必需的标签: <!DOCTYPE html> <html> <head> ...

  8. 4.23 子集 分数规划 二分 贪心 set 单峰函数 三分

    思维题. 显然考虑爆搜.然后考虑n^2能做不能. 容易想到枚举中间的数字mid 然后往mid两边加数字 使其整个集合权值最大. 这里有一个比较显然的贪心就不再赘述了. 可以发现这样做对于集合是奇数的时 ...

  9. 笨办法学python3练习代码13-14:argv参数变量的学习

    ex13.py  argv参数的学习 #argv:参数变量(argument variable),这是一个标准的编程术语,在其他语言中也可可以看到.argument可译为: 参数 #如果参数是用户在执 ...

  10. AutoMapper 9.0的改造(续)

    上一篇有一个读者,有疑问,如何自动化注册Dto 我开篇,做了一个自动化注册的 public sealed class AutoInjectAttribute : Attribute { public ...