ASP.NET WebAPI 路由规则与POST数据 【转】
http://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html
蛋疼的路由规则约定
在上一篇文章中
我们成功通过AJAX获取到了服务器的数据,
而且服务器根据请求的类型,格式化数据之后再传给客户端。
然而
在上一篇的实例中,
我们为controller程序增加一个GetProducts方法
让这个方法与GetAllProducts方法逻辑一致
public IEnumerable<Product> GetAllProducts()
{
return products;
} public IEnumerable<Product> GetProducts()
{
return products;
}
再运行程序,
发现前端AJAX已经无法正常获取数据了

对于AJAX请求
服务端返回如下内容
Multiple actions were found that match the request:
System.Collections.Generic.IEnumerable`1[HelloWebAPI.Models.Product] GetAllProducts() on type HelloWebAPI.Controllers.ProductsController\r\nSystem.Collections.Generic.IEnumerable`1[HelloWebAPI.Models.Product] GetProducts() on type HelloWebAPI.Controllers.ProductsController
也就是说
有两个同样的action满足这个请求( $.getJSON("api/products/",………..)
如果你尝试把Action名字加在请求的路径当中
比如$.getJSON("api/products/GetProducts/"….
那么就会得到这样的反馈:
"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'HelloWebAPI.Models.Product GetProductById(Int32)' in 'HelloWebAPI.Controllers.ProductsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
也就是说这个请求与
GetProductById(int id)
这个Action冲突了!
查阅微软说明得知:
在Web API的controller当中
只要方法名以“Get”开头
就会匹配所有的Get请求
同理以Post开头的方法
将匹配所有的Post请求
(目前我个人认为这是一个非常蛋疼的约定!!!)
(小尾鱼也这么认为)
插播一句
VS2012中注释与取消注释的快捷图标改成这样

也是非常蛋疼的改变!还以为是要插入个tip框!
接收POST请求
我们为实例中的controller增加一个方法
public Product PostProduct(Product item)
{
//do what you want
return item;
}
这个方法接收一个Product实体
这个实体是POST来的数据自动序列化得来的
这个工作是由WEB API完成的
在客户端POST数据的js代码如下:
function addProduct() {
var da = { "Id": "1", "Name": '我POST来的数据', "Category": 'Groceries', "Price": "1.39" };
var ok = function(){alert("ok");}
$.post("api/Products/", da, ok, "json");
}
$(addProduct);
前端传递的JSON对象,在ACTION中被序列化为实体类型。
如下图:

好吧,假设我们没有一个类型与传递的json对象相对应
该如何是好呢?
我首先想到的是把参数改成string类型的
但string类型的参数并不能接收到任何内容
如下图所示

看来我的想法是错误的
我想总会有办法解决这个问题
就此搁笔
希望喜欢的朋友推荐,并留言!
ASP.NET WebAPI 路由规则与POST数据 【转】的更多相关文章
- C# webapi 路由规则和接收数据
1:新建的web api项目 默认的访问api方式: (get,post,delect,put) api+控制器 以Post为例子 post提交单个参数: 接收方法 post提交多个参数 接 ...
- 第二十一节:Asp.Net Core MVC和WebApi路由规则的总结和对比
一. Core Mvc 1.传统路由 Core MVC中,默认会在 Startup类→Configure方法→UseMvc方法中,会有默认路由:routes.MapRoute("defaul ...
- ASP.NET WebApi 路由配置【转】
一.路由介绍 ASP.NET Web API路由是整个API的入口.我们访问某个资源就是通过路由映射找到对应资源的URL.通过URL来获取资源的. 对于ASP.NET Web API内部实现来讲,我们 ...
- ASP.NET WebApi 路由配置
ASP.NET Web API路由是整个API的入口.我们访问某个资源就是通过路由映射找到对应资源的URL.通过URL来获取资源的. 对于ASP.NET Web API内部实现来讲,我们的请求最终将定 ...
- ASP.NET MVC路由规则
1 是从上往下寻找路由规则的 2 如果上面的匹配了,则下面的不会匹配 3 假如域名是www.startpress.cn 路由规则是 routes.MapRoute( name: "Defau ...
- Asp.Net Webapi路由基本设置
1.直接在Global.asax中添加配置 如: using MvcApplication4.App_Start; using System; using System.Collections.Gen ...
- web api 路由规则和接收数据
1:默认是不带action的 所以再访问的时候 只需要 api/控制 2:加了action 就要 api/控制器/方法名字 接收方法 传参 json 序列化传参
- 【笔记】Asp.Net WebApi对js POST带参数跨域请求的支持方案
先说下需求:在原来的WebApi项目中增加对js跨域的请求支持,请求方式:以POST为主,webapi路由规则根据原项目需求修改如下: public static void Register(Http ...
- ASP.NET WebAPI从入门
在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...
随机推荐
- 设计模式 uml元素
uml的构造包含3种 事物4种:结构,行为,分组,注释事物 关系4种:泛化,实现,依赖,关联, 图10种,用例图,类图,对象,包,组件,部署,状态,活动,序列,协作 事物是对模型中最具代表性的成分的抽 ...
- 用Vundle管理Vim插件
作为程序员,一个好用的Vim,是极其重要的,而插件能够使原本功能羸弱的Vim变得像其他功能强大的IDE一样好用.然而下载.配置插件的过程比较繁琐,大家往往需要自己进行下载/配置等操作,如果还涉及到更新 ...
- Ansible实战之Nginx代理Tomcat主机架构
author:JevonWei 版权声明:原创作品 实验架构:一台nginx主机为后端两台tomcat主机的代理,并使用Ansible主机配置 实验环境 Nginx 172.16.252.82 Tom ...
- 关于jena-fuseki SPARQL query版本问题的解决方案
在做“Apache jena SPARQL endpoint及推理”时,遇到了不少问题,主要原因是jena-fuseki版本更新了.以下对问题解决方案做下笔记.想了解更多,请查阅底部参考文献. Que ...
- JavaScript (JS)基础:DOM 浅析 (含数组Array、字符串String基本方法解析)
①文本对象document: 例如:document.getElementById() 只获取一个对象 document.getElementsByTagName() 获取 ...
- 洛谷 P1342 请柬
题目描述 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片.他们已经打印请帖和所有必要的信息和计划.许多学生被雇来分发这些请 ...
- GridView数据导入Excel/Excel数据读入GridView
原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] 效果图: 解决方案:页面增加一个按钮,单击事件添加如下方法:protected void Button1_Clic ...
- 基于websocket的页面聊天程序
注:主要的问题是当浏览器窗口直接关闭时,后台会报异常,因为后台还在继续向浏览器端写数据,但是浏览器已经关闭了,会报java.net.SocketException:peer:Socket write ...
- 长沙理工校赛I题题解-连续区间的最大公约数
题目来源https://www.nowcoder.com/acm/contest/96/I 解题前们需要先知道几个结论: 首先,gcd是有区单调性的: gcd(L,R)>=gcd(L,R+d) ...
- Boost::thread库的使用(转)
原文转自 http://blog.csdn.net/lee353086/article/details/4673790 本文主要由线程启动.Interruption机制.线程同步.等待线程退出.Thr ...