zoukankan      html  css  js  c++  java
  • (一)Asp.net web api中的坑-【找不到与请求 URI匹配的 HTTP 资源】

      在.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 资源”

      TIM截图20170707104956

          

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

    此时我的心情就是“日了狗了”明明就是两个不同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

    image

    再请求,image ,

    找到了与该请求匹配的多个操作:
    类型 Service.Controllers.EnterOrExitController 的 test
    类型 Service.Controllers.EnterOrExitController 的 GetData
    类型 Service.Controllers.EnterOrExitController 的 UploadData

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

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

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

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

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

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

  • 相关阅读:
    DotNET应用架构设计指南 安全 运行管理和通讯策略
    开放、主动、好学、谦虚
    粉丝经济
    选个大市场,组建最优秀的团队,拿到花不完的钱(转)
    一个人,可以看他的学识,他的气质,他的丰采,他的谈吐(转)
    Java基础—ClassLoader的理解(转)
    数据库置疑问题解决
    Android应用中使用百度地图API定位自己的位置(二)
    Hopcroft-Karp算法模版
    html表单提交的几种方法
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/11887027.html
Copyright © 2011-2022 走看看