首页 > Windows开发 > 详细

ASP.NET WebAPI 路由规则与POST数据

时间:2016-01-07 01:02:59      阅读:307      评论:0      收藏:0      [点我收藏+]

蛋疼的路由规则约定

我们为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类型的参数并不能接收到任何内容

如下图所示

技术分享

看来我的想法是错误的

我想总会有办法解决这个问题

就此搁笔

希望喜欢的朋友推荐,并留言!


原文地址:http://www.jianfangkk.com/aspnet/201511/294

ASP.NET WebAPI 路由规则与POST数据

原文:http://www.cnblogs.com/jianfangkk/p/5107968.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!