WebApi基础
1:当Controller中有相同参数的方法时,请求调用会报错
[HttpGet]
public IEnumerable<string> Resturn()
{
return new string[] { "value1", "value2" };
} public string ResturnResult()
{
return "Success";
}
原因:webapi默认的路由是不带有action的,所以它无法知道你到底调用的是哪一个!
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
// 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
// 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。
//config.EnableQuerySupport(); // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
// 有关详细信息,请参阅: http://www.asp.net/web-api
config.EnableSystemDiagnosticsTracing();
}
}
修改路由为带有action:
config.Routes.MapHttpRoute(
name: "DefaultApi1",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
2:参数传递问题
(1)get方式和mvc中一样的
$.ajax({
url: "/api/Values/GetList",
type: "get",
data: { name: "test1" },
success: function (data) {
alert(JSON.stringify(data));
alert(data.length);
},
error: function () {
alert("失败");
}
});
public List<Person> GetList(string name)
{
var PersonList = new List<Person>(){
new Person{Name="test1",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test2",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test3",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
};
return PersonList.Where(p => p.Name == name).ToList();
}
(2)post提交,如果按照上面的方式是无法获取到参数的;一个参数的post请求和GET请求的方式不一样,后台函数的参数必须用[FromBody]标记,这样才能访问到该函数,如果不加[FromBody] , ASP.NET Web API能够正确的识别我们的 控制器 ,但却不能找到一个可以接受的方法来处理请求。那么后台参数加了[FromBody] ,代码如下是不是就可以请求成功哪?
$.ajax({
url: "/api/Values/GetList",
type: "post",
data: { name: "test1" },
success: function (data) {
alert(JSON.stringify(data));
alert(data.length);
},
error: function () {
alert("失败");
}
});
[HttpPost]
public List<Person> GetList([FromBody]string name)
{
var PersonList = new List<Person>(){
new Person{Name="test1",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test2",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test3",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
};
return PersonList.Where(p => p.Name == name).ToList();
}
答案是失败的,确切的说是可以访问到控制器里的GetList方法的,但是GetList函数的参数是获取不到前台ajax传递过来的值得,为什么呢?是因为Web API 要求请求传递的 [FromBody] 参数,是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。
所以 将data:{"name":"test1" } 改成data:{"":"test1" } 这样后台函数才可以正确接收到传递过来的参数值。
3:多个参数的POST请求
function GetResult() {
var person = {
Name: "test1",
Sex:"男"
};
$.ajax({
url: "/api/Values/GetList",
type: "post",
data: person,
success: function (data) {
alert(JSON.stringify(data));
alert(data.length);
},
error: function () {
alert("失败");
}
});
}
[HttpPost]
public List<Person> GetList([FromBody]Person per)
{
var PersonList = new List<Person>(){
new Person{Name="test1",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test2",Sex="女",Duty="工程师",CompanyName="北京XX科技有限公司"},
new Person{Name="test3",Sex="男",Duty="工程师",CompanyName="北京XX科技有限公司"}
};
return PersonList.Where(p => p.Name == per.Name && p.Sex == per.Sex).ToList();
}
4:多个对象的传递
根据3中的方式,多个对象就好解决了;采用JSON.stringify传递,后台进行反序列即可;
5:接口测试工具
WebApi接口测试工具:WebApiTestClient http://www.cnblogs.com/landeanfen/p/5210356.html
6:webapi使用场景
选择Web API还是WCF : http://www.cnblogs.com/klsw/archive/2016/03/02/5236621.html
WebApi基础的更多相关文章
- net core Webapi基础工程搭建(六)——数据库操作_Part 2
目录 前言 开始 使用 小结 前言 昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据 ...
- net core Webapi基础工程搭建(六)——数据库操作_Part 1
目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...
- BeetleX和Asp.net Core之webapi基础性能对比
本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比 测试环境描述 硬件配置:E1230V2 16G内存 10Gb带宽 操作系统:Windows server 2008 ...
- net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2
目录 前言 引入 自定义属性 测试 小结 前言 前一篇讲到了中间层的使用,可能不是那么AOP,今天主要来说下一个轻量级的AOP第三方类库AspectoCore. 简单介绍下这个类库,AspectCor ...
- 第十九节:Asp.Net Core WebApi基础总结和请求方式
一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...
- Web API系列之二WebApi基础框架搭建
本文主要介绍如何搭建一个WebApi的项目.关于如何搭建WebApi的方式一共有两种: 一.通过vs直接新建一个WebApi的项目,步骤如下: 第一步: 新建一个空的Web应用程序,可以理解为作为We ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列(二)
前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之久,人总有懒惰的时候,时间越长越懒惰,但是呢,不学又不行,持续的惰性是不行dei,要不然会被时光所抛弃,技术所淘汰,好吧,进 ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列(一)
前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时间也是一直在看ASP.NET Core的内容,所以后续会穿插讲EF Core和ASP.NET Core,别认为你会 ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列 (二)
转自博客:https://www.cnblogs.com/CreateMyself/p/10604293.html 前言 本节内容,我们来讲讲.NET Core当中的模型绑定系统.模型绑定原理.自定义 ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列 (一)
转自博客:https://www.cnblogs.com/CreateMyself/p/9235968.html 前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时 ...
随机推荐
- PHP message: PHP Fatal error: require(): Failed opening required
PHP message: PHP Warning: require(/data/wwwroot/blog.sgfoot.com/bootstrap/autoload.php): failed to o ...
- 想给自己的实景三维模型做个案例集?Wish3D Earth再合适不过了
很多朋友向用户展示实景三维模型的时候经常面临这样的问题:
- git工程迁移(修改提交服务器地址)方法
git remote set-url [--push] <name> <newurl> [<oldurl>]git remote set-url --add [-- ...
- 2017.2.20 activiti实战--第一章--认识Activiti
学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...
- JAVA Eclipse开发Android程序会经常闪退是怎么回事
类没有new就直接用会闪退,比如下面我在前面声明了ClientSocket的类,点击连接按钮之后,如果不先new就直接Connect就会闪退 你在当前页面创建findViewById的时候,如果找 ...
- zerglurker的C语言教程007——代码运行的顺序
软件开发中.代码有三种基本运行顺序: 顺序运行 代码从入口開始一条一条运行.直到返回或者结束 循环运行 在设定条件后,代码反复运行某一个或多个部分,直到达到某些条件后终止 条件运行 代码会先推断某些条 ...
- 习科小D整理找网站后台办法[科普]
习科科普贴,如何找到网站的后台 作者:小Dの马甲来自:习科论坛 - Silic.Org - BlackBap.Org 1, 穷举猜解 现如今可以暴力猜解网站后台登陆地址的软件有很多,从最早的啊D ...
- JVM的GC简介和实例
本文是一次内部分享中总结了jvm gc的分类和一些实例, 内容是introduction级别的,供初学人士参考.成文仓促,难免有些错误,如果有大牛发现,请留言,我一定及时更正,谢谢!JVM内存布局主要 ...
- C++的双重检查锁并不安全(转)
一个典型的单例模式构建对象的双重检查锁如下: static Singleton * getSingleObject() { if(singleObject==NULL) { lock(); if(si ...
- C语言之基本算法32—鞍点
//数组 /* ================================================================== 题目:求随意矩阵的全部鞍点.并统计个数.(在矩阵中 ...