ASP.NET Web API接受AngualrJS的QueryString的两种方式
ASP.NET Web API如何接受来自AngualrJS的QueryString呢?本篇体验两种方式。
第一种方式:http://localhost:49705/api/products?search=GDN
这种方式是QueryString原生的格式。
首先,把当前的域名和端口号放到一个自定义的module中去。
(function () {
"use strict";
angular.module("custommodule", ["ngResource"])
.constant("appSettings", {
serverPath: "http://localhost:49705/"
});
}());
以上,依赖ngResource这个module,这个module在angular-resource.js文件中,注意需要引用该文件。
接着,通过factory的方式为custommodule创建一个自定义service。
(function () {
"use strict";
//通过工厂的方式创建了一个服务
angular.module("custommodule")
.factory("productResource", ["$resource", "appSettings", productResouce]);
function productResouce($resource, appSettings) {
return $resource(appSettings.serverPath + "/api/products");
}
}());
以上,productResource这个服务返回的是经$resource封装的完整的API请求路径。
现在,某个controller需要使用productResource这个服务。
(function () {
"use strict";
angular
.module("productManagement")
.controller("ProductListCtrl",
ProductListCtrl);
function ProductListCtrl(productResource) {
var vm = this;
vm.searchCriteria = "GDN";
productResource.query({search: vm.searchCriteria},function (data) {
vm.products = data;
});
}
}());
以上,从前端传来名称为search的QueryString。
后端ASP.NET Web API中,action方法的形参名称必须也是search。
public IEnumerable<Product> Get(string search)
{
var productRepository = new ProductRepository();
var products = productRepository.Retrieve();
return products.Where(p => p.ProductCode.Contains(search));
}
WebApiConfig类对应的设置为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
此时,前端是以http://localhost:49705/api/products?search=GDN这种方式请求数据的。
如果我们想以http://localhost:49705/api/products/GDN这种方式请求数据呢?
第二种方式:http://localhost:49705/api/products/GDN
这种方式需要做一些路由设置。
需要让AngularJS知道,在products/后面的这个位置传的值是赋值给search这个QueryString的。
也要让ASP.NET Web API知道,当读取products/后面的这个值后,是要赋值给路由中的search这个变量的。
如何让AngularJS的路由符合格式呢?
function productResouce($resource, appSettings) {
return $resource(appSettings.serverPath + "/api/products/:search");
}
如何让ASP.NET Web API的路由同AngualrJS对应起来呢?
首先,要在路由中允许有search这个QueryString。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{search}",
defaults: new { search = RouteParameter.Optional }
);
然后,在Action方法中接受search这个QueryString。
public IEnumerable<Product> Get(string search)
{
var productRepository = new ProductRepository();
var products = productRepository.Retrieve();
return products.Where(p => p.ProductCode.Contains(search));
}
这时候,前端是以http://localhost:49705/api/products/GDN这种方式请求的。
总结:
● 如果是想获取默认情况下的QueryString,只需要保证前后段的查询变量一致就好了,比如这里的search
● 如果想获取/等自定义格式下的QueryString,前端AngualrJS需要以类似/api/products/:search这样的方式定义路由,后端ASP.NET Web API中也需要把search作为路由中的一个变量,在config.Routes.MapHttpRoute方法中设置
ASP.NET Web API接受AngualrJS的QueryString的两种方式的更多相关文章
- web.config文件中配置数据库连接的两种方式
web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报 分类: 数据库(74) 在网站开发 ...
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
- 转 Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到 ...
- Web APi之认证(Authentication)两种实现方式后续【三】(十五)
前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不进则退,之前学的东西没怎么用,也忘记了一点,不过至少由于是切身研究,本质以及原理上的脉络 ...
- ASP.NET MVC 下拉框的传值的两种方式
以前使用WebForm变成时,下拉框传值只需直接在后台绑定代码就可以了.现在我们来看看在MVC中DropDownList是如果和接受从Controller传过来的值的. 第一种:使用DropDownL ...
- (先导)Git Api对接:获取private_token的两种方式
" Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...
- ASP.NET MVC之读取服务器文件资源的两种方式
初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...
- 【前台 ajax】web项目前台传递数组给后台 两种方式
项目使用maven springMVC 有需求 将前台的数组 在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true, ] 如果Post ...
- Asp.net MVC在Razor中输出Html的两种方式
http://qubernet.blog.163.com/blog/static/177947284201485104616368/ Razor中所有的Html都会自动编码,这样就不需要我们手动去编码 ...
随机推荐
- AUI-靠谱的移动前端框架
在如何开发出优秀的APICloud应用中ApiCloud官方推荐我们使用轻量级的框架AUI,针对AUI官网没有提供体验地址 特意编译了一个APP供给大家体验 aui官方地址:http://www.au ...
- [WC2008]游览计划 「斯坦那树模板」
斯坦那树 百度释义 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网络开 ...
- [SDOI2009]HH去散步 「矩阵乘法计数」
计数问题也许可以转化为矩阵乘法形式 比如若该题没有不能在一条边上重复走的条件限制,那么直接将邻接矩阵转化为矩阵乘法即可 故 矩阵乘法计数 对于计数问题,若可以将 \(n\) 个点表示成 \(n \ti ...
- XPATH的几个常用函数
1.contains (): //div[contains(@id,'in')] ,表示选择id中包含有’in’的div节点2.text():由于一个节点的文本值不属于属性,比如“<a clas ...
- Kali Linux上安装SSH服务
安装 SSH 从终端使用 apt-get 命令安装 SSH 包: # apt-get update # apt-get install ssh 启用和开始使用 SSH 为了确保安全 shell 能够使 ...
- Redis Scan命令
原地址:https://www.cnblogs.com/tekkaman/p/4887293.html [Redis Scan命令] SCAN cursor [MATCH pattern] [COUN ...
- jdk678910新特性地址
jdk678910新特性地址 https://blog.csdn.net/f641385712/article/details/81289401 每篇一句:每个人受到的尊重从来都不是应得的,而是赢得的 ...
- 解决 Delphi XE5 写Android程序的No resource identifier found for attribute... 错误【转】
原文:http://www.hxhlb.cn/article/32142aaeb67bbc05379369c3.html 那一天,我装上了RAD Studio XE5. 当天晚上,我就写了一个小小的A ...
- Linux下jdk、Tomcat、MySQL的安装
1. 安装JDK 1.上传jdk-7u45-linux-x64.tar.gz到Linux上(使用WinSCP工具) 2.解压jdk到/usr/local目录 tar -zxvf jdk-7u45- ...
- Codeforces Round #529 (Div. 3) 题解
生病康复中,心情很不好,下午回苏州. 刷了一套题散散心,Div 3,全部是 1 A,感觉比以前慢了好多好多啊. 这几天也整理了一下自己要做的事情,工作上要努力... ... 晚上还是要认认真真背英语的 ...