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

最新文章

  1. jQuery的几个应例题、JSON基础
  2. Spark Application的调度算法
  3. php5.3新特性 之 mysql native driver(mysqlnd)
  4. 在Linux中永久设置Anaconda环境变量的方法
  5. 使用WebView视图显示网页-----迷你浏览器
  6. Java开发核心技术面试心得分析
  7. html 模板 swig 预编译插件 grunt-swig-precompile
  8. Cloud Insight 现在已经支持监控 Cassandra 啦!
  9. UDP的崛起
  10. Redis 11种Web应用场景举例
  11. python中金额计算的小问题
  12. django rest framework serializers
  13. [Swift]LeetCode488. 祖玛游戏 | Zuma Game
  14. eclipse编译器显示的文件名乱码,活动标签乱码(已解决)
  15. LwIP-网络接口管理
  16. Oracle ebs 数据脱敏
  17. haar的简单应用(2)
  18. B. Array
  19. Leetcode88_Merge Sorted Array_Easy
  20. ListView and gridview常用属性

热门文章

  1. 关联分析(Apriori算法)
  2. 基于VUE开发项目
  3. 笔记-迎难而上之Java基础进阶7
  4. java 读写操作
  5. 调参tips
  6. ArcGIS 10.2 二次开发,兼容Visual Studio 2012二次开发,完美安装教程
  7. 如何在IIS7上配置 FTP7并使用IIS管理凭据方式进行验证
  8. GLSL逐像素光照 【转】
  9. MFC 消息类型
  10. 转: scala语言的简单入门 (IBM develop)