(一)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不好使,主要是自己不熟悉。
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 资源】的更多相关文章
- (四)Asp.net web api中的坑-【api的返回值】
void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 我这里并不想赘述这些返回类型, 可以参考博文http://blog.csdn.net/leon ...
- (三)Asp.net web api中的坑-【http post请求中的参数】
接上篇, HttpPost 请求 1.post请求,单参数 前端 var url = 'api/EnterOrExit/GetData2';var para = {};para["Phone ...
- (二)Asp.net web api中的坑-【http get请求中的参数】
webapi主要的用途就是把[指定的参数]传进[api后台],api接收到参数,进行[相应的业务逻辑处理],[返回结果].所以怎么传参,或者通俗的说,http请求应该怎么请求api,api后台应该怎么 ...
- 【ASP.NET Web API教程】4.1 ASP.NET Web API中的路由
原文:[ASP.NET Web API教程]4.1 ASP.NET Web API中的路由 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. ...
- ASP.NET Web API中的Controller
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- ASP.NET Web API 中的异常处理(转载)
转载地址:ASP.NET Web API 中的异常处理
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- 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 ...
随机推荐
- 定时器 间隔调用setInterval
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C# 通过 参数返回 C++ 指针
参数返回 C++ 指针 C++ 代码 Extern_C BASECORELIBRARY_API char * GetFileByteArray(wchar_t * BinfilePath, wchar ...
- 查看DOM对象的style样式,attributes属性,children
// 在不同的浏览器查看各种属性,样式.如果不知道哪个对象的属性样式怎么写,可以在控制台输出 style attributes// 所有的属性样式都会出现// 此外还可以检查某个属性在不同浏览器是否 ...
- Greenplum 表空间和filespace的用法
转载:https://yq.aliyun.com/articles/190 Greenplum支持表空间,创建表空间时,需要指定filespace.postgres=# \h create table ...
- promise 及 setTimeout 执行顺序
setTimeout(function() { console.log(1); }, 0); new Promise(function(res, rej) { res(2); console.log( ...
- c++学生信息管理系统(window控制台实现鼠标点击操作)
翻起大一时写过的作业代码--一个学生信息管理系统,当时不会使用QT,不会MFC等库,只会c++,但是又想做一个有界面的,能够实现鼠标操作的程序.于是绞尽脑汁查资料,自己造轮子,最终写出来了下面的这个现 ...
- Mysql数据库简单使用(二)
Mysql导入.sql文件 进入数据库(要导入的数据库) 数据库中有要导入.sql文件名的数据库,没有则新建. source 路径+文件名 souce /home/robot/csql.sql 数据库 ...
- 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
答:术语叫贪婪匹配( <.> )和非贪婪匹配(<.?> ) 例如: test <.*> : test <.*?> :
- 算法练习 —— LeetCode 1-20题
一.两数之和 1.1 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, ...
- GitHub OAuth 第三方登录示例教程
这组 OAuth 系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过 OAuth 获取 API 数据. 很多网站登录时,允许使用第三方网站的身份,这称为&quo ...