在.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}",

(一)Asp.net web api中的坑-【找不到与请求 URI匹配的 HTTP 资源】的更多相关文章

  1. (四)Asp.net web api中的坑-【api的返回值】

    void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 我这里并不想赘述这些返回类型, 可以参考博文http://blog.csdn.net/leon ...

  2. (三)Asp.net web api中的坑-【http post请求中的参数】

    接上篇, HttpPost 请求 1.post请求,单参数 前端 var url = 'api/EnterOrExit/GetData2';var para = {};para["Phone ...

  3. (二)Asp.net web api中的坑-【http get请求中的参数】

    webapi主要的用途就是把[指定的参数]传进[api后台],api接收到参数,进行[相应的业务逻辑处理],[返回结果].所以怎么传参,或者通俗的说,http请求应该怎么请求api,api后台应该怎么 ...

  4. 【ASP.NET Web API教程】4.1 ASP.NET Web API中的路由

    原文:[ASP.NET Web API教程]4.1 ASP.NET Web API中的路由 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. ...

  5. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  6. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  7. ASP.NET Web API 中的异常处理(转载)

    转载地址:ASP.NET Web API 中的异常处理

  8. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  9. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

随机推荐

  1. python - django (母版与组件)

    # 把多个页面通用的部分提取出来 放在一个母版中 # 其它的页面只需要继承 母版就可以 # 使用步骤:( 继承的语句要放在第一行 ) """ 1. 把公用的 HTML 部 ...

  2. PHP基础语法之 位运算

    写了几年PHP的人都好奇说,没有用过位运算符.所以,此处你看二进制看的头晕,就去T¥M¥D吧. 位运算符基本不用,我们也将这个知识设置为了解级别.位运算符的知识点,你不想学习也可以.等以后用到位运算的 ...

  3. MongoDB 集群设置集合分片生效及查看集合分片情况

    一.设计DB分片与Collection分片 #连接mongos /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo  127.0.0.1:27017   ...

  4. Linux core dump 诊断进程奔溃退出

           最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何.       如果系统开启了core ...

  5. vue中$refs、,$emit、$on

    $emit https://blog.csdn.net/sllailcp/article/details/78595077 $on https://www.jianshu.com/p/a544728b ...

  6. vim命令整理

    最近使用vim比较多,整理一下!

  7. 【转】harbor仓库高可用集群部署说明

    之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...

  8. JavaScript 字符串转数字(整数,浮点数,进制转换)

    下面是使用parseFloat()方法的示例: parseFloat("1234blue"); //returns 1234.0 parseFloat("0xA" ...

  9. Sentinel 快速入门

    Sentinel 简介 什么是 Sentinel? 『Sentinel』是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多 ...

  10. 报错:使用java api连接redis集群时报错 READONLY You can't write against a read only slave.

    报错: READONLY You can’t write against a read only slave. 报错原因: 因为连接的是从节点,从节点只有读的权限,没有写的权限 解决方案: 进入red ...