博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(一)Asp.net web api中的坑-【找不到与请求 URI匹配的 HTTP 资源】
阅读量:4978 次
发布时间:2019-06-12

本文共 1897 字,大约阅读时间需要 6 分钟。

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler),

       Web Service

               SOAP协议的,数据格式是XML,HTTP协议

        WCF

               基于SOAP的,数据格式是XML,可以支持各种各样的协议,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.

        Web API(文章主讲)

               简单的构建HTTP服务,.net平台上Web API 是一个开源的、理想的、构建REST-ful 服务的技术,支持MVC的特征,像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试。这些可以使程序更简单、更健壮,说白了,Asp.net mvc 你会用,那么编写webapi,构建http服务,也木有问题,轻量级的框架,并且对限制带宽的设备,比如智能手机等支持的很好。

        本人都自己编写测试过webservice,wcf,webapi,但是由于工作中构建的服务多用于浏览器、手机等,也是.net平台上,所以对webapi的使用更多。当然使用的路上,发现遇到的”坑“也多,当然不是说webapi不好使,主要是自己不熟悉。

 

  1.    Web Api坑之“我他妈写的action,请求咋就进不来,还提示我找不到与请求 URI匹配的 HTTP 资源”

      

尝试修改controller中的action名字,发现类post,get开头的action-public void GetData1(string data),但是诡异的问题是当继续再添加几个action-public void GetData2(string data),public void GetData2(string data);

此时我的心情就是“日了狗了”明明就是两个不同action,你他妈居然提示我“找到了与该请求匹配的多个操作”

还是太年轻,经验太少,查阅了相关资料,

                       “      微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api

                       是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,

                       它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口

                       更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete

                       等,它们分别对应的几个操作,下面讲一下:

                               GET:生到数据列表(默认),或者得到一条实体数据

                               POST:添加服务端添加一条记录,记录实体为Form对象

                               PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输

                               DELETE:删除 服务端的一条记录

                      注意上面公开的API接口都是在XMLHttpRequest情况下调用的,当然你可以使用jquery的ajax组件

                      来完成这个请求调用,它的代码更加面向对象.”

哦,原来如此,认识webapi是认识get,post,put,delete,(这是我猜的,测试下),再加一个action,test

再请求, ,

找到了与该请求匹配的多个操作:

类型 Service.Controllers.EnterOrExitController 的 test
类型 Service.Controllers.EnterOrExitController 的 GetData
类型 Service.Controllers.EnterOrExitController 的 UploadData

好像是猜错了,他好像才不管你action的名字,你发起httpget请求,他就把action里面的get全搞出来匹配,http-get-3个扔给你,哦,OMG,“我们找到了与该请求匹配的多个操作,你要哪一个?”,

 既然是这样,我需要在一个api控制器中写多个action用以请求访问咋办呢,怎样才能路由到指定的action,去完成http请求。

答案,就是改路由的配置文件,

 

   可能你也发现了,这份配置文件中:

routeTemplate: "api/{controller}/{id}",

   他娘的根本没有规定action,所以怎样都匹配不到呢,人家是按照REST风格默认去找get,post,要想向asp.net mvc web中那样请求,你只能修改为routeTemplate: "api/{controller}/{action}/{id}",

转载于:https://www.cnblogs.com/RandyField/p/7131476.html

你可能感兴趣的文章
[Git] 005 初识 Git 与 GitHub 之分支
查看>>
【自定义异常】
查看>>
pip install 后 importError no module named "*"
查看>>
springmvc跳转方式
查看>>
IOS 第三方管理库管理 CocoaPods
查看>>
背景色渐变(兼容各浏览器)
查看>>
MariaDB 和 MySQL 比较
查看>>
MYSQL: 1292 - Truncated incorrect DOUBLE value: '184B3C0A-C411-47F7-BE45-CE7C0818F420'
查看>>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
查看>>
springMVC Controller 参数映射
查看>>
【bzoj题解】2186 莎拉公主的困惑
查看>>
Protocol Buffer学习笔记
查看>>
Update 语句
查看>>
HBuilder打包Android apk 支付不了问题解决
查看>>
poj2594——最小路径覆盖
查看>>
欧拉函数
查看>>
关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案...
查看>>
php文件操作(上传文件)2
查看>>
linux内核驱动模型
查看>>
给WebApp加一个“壳”,实现Andriod系统添加到桌面
查看>>