前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET WebAPI 路由规则与POST数据

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

作者头像
liulun
发布于 2022-05-09 05:23:23
发布于 2022-05-09 05:23:23
81200
代码可运行
举报
文章被收录于专栏:liulunliulun
运行总次数:0
代码可运行

蛋疼的路由规则约定

上一篇文章

我们成功通过AJAX获取到了服务器的数据,

而且服务器根据请求的类型,格式化数据之后再传给客户端。

然而

在上一篇的实例中,

我们为controller程序增加一个GetProducts方法

让这个方法与GetAllProducts方法逻辑一致

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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增加一个方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        public Product PostProduct(Product item)
        {
            //do what you want
            return item;
        }

这个方法接收一个Product实体

这个实体是POST来的数据自动序列化得来的

这个工作是由WEB API完成的

在客户端POST数据的js代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            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类型的参数并不能接收到任何内容

如下图所示

看来我的想法是错误的

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

就此搁笔

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【翻译】ASP.NET Web API入门
ASP.NET Web API是在.NET Framework上创建RESTful应用程序的理想平台
liulun
2022/05/09
1.8K0
【翻译】ASP.NET Web API入门
Web API--入门--(一)ASP.NET Web API 2(C#)入门
在本教程中,您将使用ASP.NET Web API创建返回产品列表的Web API。前端网页使用jQuery显示结果。
喵叔
2020/09/08
4.3K0
Web API--入门--(一)ASP.NET Web API 2(C#)入门
Asp.Net Web API 2第五课——Web API路由
    Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
1.2K0
Asp.Net Web API 2第五课——Web API路由
ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
  为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area)。
Edison Zhou
2018/08/20
2.3K0
ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
Asp.Net Web API(二)
当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页。
莫问今朝
2018/08/31
1.9K0
Asp.Net Web API(二)
从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 这是第一大部分的最后一小部分。要完成CRUD的操作。 Repository Pattern 我们可以直接在Controller访问DbContext,但是可能会有一些问题: 1.相关的一些代码到处重复,有可能在程序中很多地方我都会更新Product,那样的话我可能就会在多个Action里面写同样的代码,而比
solenovex
2018/03/01
3.6K0
从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
Asp.Net Web API 2第九课——自承载Web API
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html
aehyok
2018/08/31
4960
Asp.Net Web API 2第九课——自承载Web API
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(二)
集成Entity Framework Core(EF Core)是在ASP.NET Core Web API中进行数据库访问的常见方式。以下是集成EF Core的基本步骤:
喵叔
2024/05/24
3310
Asp.net web api 知多少
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
圣杰
2018/01/11
4.8K0
Asp.net web api 知多少
ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
什么是依赖注入     依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型如下: namespace Pattern.DI.MVC.Models { public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price {
小白哥哥
2018/03/07
2.3K0
ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
Asp.Net Web API(六)
     Asp.Net Web API不可以需要IIS。可以自己在主机上承载一个Web API
莫问今朝
2018/08/31
9900
Asp.Net Web API(六)
Asp.Net Web API 2第六课——Web API路由和动作选择
      Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
9750
Asp.Net Web API 2第六课——Web API路由和动作选择
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(一)
Web API(Web Application Programming Interface)的重要性在于其在现代软件开发中扮演着关键的角色。以下是一些关于Web API重要性的方面:
喵叔
2024/05/24
1.1K0
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(一)
ASP.NET Web API路由规则(二)
(注:至于为什么用MapHttpRoute而不是MapRoute;为什么用routeTemplate而不是用url我们再以后的章节介绍)
liulun
2022/05/09
5050
ASP.NET Web API路由规则(二)
Asp.Net Web API 2第十五课——Model Validation(模型验证)
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html
aehyok
2018/08/31
7320
Asp.Net Web API 2第十五课——Model Validation(模型验证)
【SpringBoot系列】OpenAPI规范构建SpringBoot接口服务
到目前为止,我们已经了解了如何生成一个新的 spring boot 应用程序,然后如何将其容器化。但是,我们的应用程序没有任何功能。今天我们将学习如何使用 Spring boot 创建 REST API。我们将采用模式优先的方法生成 REST API 接口,本文将采用 OpenAPI 规范以及如何使用该规范生成 REST API 接口。
Freedom123
2024/04/19
7540
IOS5开发-http get/post调用mvc4 webapi互操作(图片上传)
目前最流行的跨平台交互是采用http协议通过JSON对象进行互操作。这种方式最简单,也很高效。webservice+xml的方式似乎已经过时。 下面是我做的一个例子 webapi的代码 View Code public IEnumerable<Product> GetAllProducts()         {             Console.WriteLine(DateTime.Now.ToLongTimeString() + " : receive request.");          
阿新
2018/04/12
1.2K0
IOS5开发-http get/post调用mvc4 webapi互操作(图片上传)
Asp.Net Web API 2第十八课——Working with Entity Relations in OData
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html。
aehyok
2018/08/31
7750
Asp.Net Web API 2第十八课——Working with Entity Relations in OData
从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登录), 所以
solenovex
2018/03/01
2.1K0
从头编写 asp.net core 2.0 web api 基础框架 (1)
ASP.NET (Core)WebApi参数传递实操演练
一、ASP.NET (Core)WebApi参数传递实操演练 1、什么是contentType和dataType? $.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。 更简单的解释: contentType: 告诉服务器,我要发什么类型的数据。 dataType:告诉服务器,我要想什么类型的数据。 在http 请求中,get 和 post 是最常用的。在 jquery 的 ajax 中, c
跟着阿笨一起玩NET
2021/02/02
3.8K0
推荐阅读
相关推荐
【翻译】ASP.NET Web API入门
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验