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. iOS数组去重的方法,超级简单

    //最近新发现的一个数组去重,用不着循环,一句代码搞定 //去除数组中重复的 NSArray *oldArr = @[@"1",@"2",@"3&qu ...

  2. 批量Kill多个进程

    ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下 ...

  3. Ceres Solver: 高效的非线性优化库(一)

    Ceres Solver: 高效的非线性优化库(一) 注:本文基于Ceres官方文档,大部分由英文翻译而来.可作为非官方参考文档. 简介 Ceres,原意是谷神星,是发现不久的一颗轨道在木星和火星之间 ...

  4. 利用Django徒手写个静态页面生成工具

    每个Geek对折腾自己的博客都有着一份执念 背景介绍 曾经多次在不同的平台写博客,但全部都以失败而告终.去年七月选择微信公众号做为平台开始了又一次的技术分享,庆幸一直坚持到现在,但随着文章发表的越来越 ...

  5. fetch API 简单解读

    http://f2e.souche.com/blog/fetch-api-jie-du/?utm_source=tuicool&utm_medium=referral 在我们日常的前端开发中, ...

  6. SQLite的Pragma语句

    SQLite的Pragma语句   Pragma语句是SQLite提供的特有语句.该语句可以查询SQLite的非表数据,还可以修改SQLite的库.在iOS开发中,利用Pragma语句,可以实现很多非 ...

  7. MySQL备份工具收集

    说明:MySQL的备份不像SQL Server那么的简单,备份时需要分数据库引擎类型,现在主流的就两个:InnoDB和MyISAM,而这两种类型备份方式各不一样. MyISAM: mysqlhotco ...

  8. Maven项目导入到Eclipse时Build出现the user operation is waiting for building workspace to complete的问题解决

    解决办法如下: 1.选择菜单栏的[Project],然后把菜单栏中[Build Automatically]前面的对钩去掉.

  9. poor-pigs(非常好的思路)

    https://leetcode.com/problems/poor-pigs/ package com.company; class Solution { // 下面第二种做法貌似是OJ原来的做法, ...

  10. 七天学会ASP.NET MVC (四)——用户授权认证问题 【转】

    http://www.cnblogs.com/powertoolsteam/p/MVC_four.html 小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在 ...