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基础的更多相关文章

  1. net core Webapi基础工程搭建(六)——数据库操作_Part 2

    目录 前言 开始 使用 小结 前言 昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据 ...

  2. net core Webapi基础工程搭建(六)——数据库操作_Part 1

    目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...

  3. BeetleX和Asp.net Core之webapi基础性能对比

    本文主要针对BeetleX和Asp.net Core在基础WebApi功能性能对比 测试环境描述 硬件配置:E1230V2 16G内存 10Gb带宽 操作系统:Windows server 2008 ...

  4. net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2

    目录 前言 引入 自定义属性 测试 小结 前言 前一篇讲到了中间层的使用,可能不是那么AOP,今天主要来说下一个轻量级的AOP第三方类库AspectoCore. 简单介绍下这个类库,AspectCor ...

  5. 第十九节:Asp.Net Core WebApi基础总结和请求方式

    一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...

  6. Web API系列之二WebApi基础框架搭建

    本文主要介绍如何搭建一个WebApi的项目.关于如何搭建WebApi的方式一共有两种: 一.通过vs直接新建一个WebApi的项目,步骤如下: 第一步: 新建一个空的Web应用程序,可以理解为作为We ...

  7. 你所不知道的ASP.NET Core MVC/WebApi基础系列(二)

    前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之久,人总有懒惰的时候,时间越长越懒惰,但是呢,不学又不行,持续的惰性是不行dei,要不然会被时光所抛弃,技术所淘汰,好吧,进 ...

  8. 你所不知道的ASP.NET Core MVC/WebApi基础系列(一)

    前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时间也是一直在看ASP.NET Core的内容,所以后续会穿插讲EF Core和ASP.NET Core,别认为你会 ...

  9. 你所不知道的ASP.NET Core MVC/WebApi基础系列 (二)

    转自博客:https://www.cnblogs.com/CreateMyself/p/10604293.html 前言 本节内容,我们来讲讲.NET Core当中的模型绑定系统.模型绑定原理.自定义 ...

  10. 你所不知道的ASP.NET Core MVC/WebApi基础系列 (一)

    转自博客:https://www.cnblogs.com/CreateMyself/p/9235968.html 前言 最近发表的EF Core貌似有点多,可别误以为我只专攻EF Core哦,私下有时 ...

随机推荐

  1. linux svn co 重新迁出

    在linux环境下,使用svn co (即svn checkout) 报svn: Authorization failed错误, 使用svn co svn://localhost/temp.cc /d ...

  2. Windbg调试Sql Server 进程

    http://blog.csdn.net/bcbobo21cn/article/details/52261466 http://www.sqlservercentral.com/blogs/asche ...

  3. 基于Tiny4412的I2C驱动分析

    本文以tiny4412平台上到三轴加速度器为例简单分析了Linux下到i2c驱动编程. http://pan.baidu.com/s/1c0H5vRq

  4. iOS github大全 & iOS7的学习blog

    iOS github大全 :有600多个iOS各方面的开源库,并分类了 一天天学习iOS7 :每天学习一点iOS7的新特性

  5. Java Web开发(JSP、Servlet)乱码的一揽子解决方案

    千万不要看网上那些杂七杂八的解决乱码的文章,解决乱码最好的方法是(没有之一):在所有地方统一采用UTF-8编码. 这其中包括: 1 - 工程 如果使用的是Eclipse,那么打开Preference, ...

  6. Dedecms 数据库结构分析

    本文主要是为了今后对Dedecms做二次开发所写.安装后dedecms的数据库结构,如(图1)所示, 安装后的dedecms一共有 86 张数据表. 主要数据结构表 dede_addonarticle ...

  7. IDEA使用Maven打包时如何去掉测试阶段

    如图

  8. zabbix学习系列之触发器

    触发器的简介 监控项仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器"正式 用于为监控项所收集的数据定义阈值 每一个触发器 ...

  9. url 传中文

    if (null == keyword || keyword.equals("关键字")) keyword = ""; if(keyword.length()& ...

  10. Odoo11 新功能 : 栏位隐藏

        Odoo11增加了一个 新的 modifier-. 先上 前端框架代码     invisible / readonly / required 这几个 是经常在用的, column_invis ...