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的两种方式的更多相关文章

  1. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

  2. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  3. 转 Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到 ...

  4. Web APi之认证(Authentication)两种实现方式后续【三】(十五)

    前言 之前一直在找工作中,过程也是令人着实的心塞,最后还是稳定了下来,博客也停止更新快一个月了,学如逆水行舟,不进则退,之前学的东西没怎么用,也忘记了一点,不过至少由于是切身研究,本质以及原理上的脉络 ...

  5. ASP.NET MVC 下拉框的传值的两种方式

    以前使用WebForm变成时,下拉框传值只需直接在后台绑定代码就可以了.现在我们来看看在MVC中DropDownList是如果和接受从Controller传过来的值的. 第一种:使用DropDownL ...

  6. (先导)Git Api对接:获取private_token的两种方式

    " Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.在公司一般用于代码管理:开发用例管理平台时我们选择使用git来管理用例,期间使用了很多git ap ...

  7. ASP.NET MVC之读取服务器文件资源的两种方式

    初次认识asp.net mvc时,以为所有文件都需要走一遍路由,然后才能在客户端显示, 所以我首先介绍这一种方式 比如说:我们在服务器上有图片: ~/resource/image/5.jpg 我们就需 ...

  8. 【前台 ajax】web项目前台传递数组给后台 两种方式

    项目使用maven    springMVC 有需求 将前台的数组   在ajax中 送给后台 方式1: 前台代码:[注意:ajax中的属性---traditional:true,  ] 如果Post ...

  9. Asp.net MVC在Razor中输出Html的两种方式

    http://qubernet.blog.163.com/blog/static/177947284201485104616368/ Razor中所有的Html都会自动编码,这样就不需要我们手动去编码 ...

随机推荐

  1. nginx参数优化

    大家好,分享即关爱,我们很乐意和你分享一些新的知识,我们准备了一个 Nginx 的教程,分为三个系列,如果你对 Nginx 有所耳闻,或者想增进 Nginx 方面的经验和理解,那么恭喜你来对地方了. ...

  2. MVC layout 命名空间引用问题

    虽然用MVC做了很多项目,但是都是在别人搭好的框架上实现 今天碰到一个很简单的命名空间引用问题 如图所示,Scripts和Styles 都没有引用命名空间 解决方法一: 直接使用 System.Web ...

  3. Gentoo rc-update service ‘net.eth0′ does not exist

    最近迷上了Gentoo,并相信以后也会把更多的精力放在Gentoo上,不过Gentoo的安装的过程的确让很多人却步. 本文只提到添加net.eth0到默认的运行级别时一个很小的报错解决. # nano ...

  4. ubuntu12.04安装maven

    step: 1,确认已经安装jdk, java --version 2,下载apache-maven-3.3.9 下载地址:http://maven.apache.org/download.cgi 3 ...

  5. [golang note] 环境搭建

    LiteIDE(windows) • golang安装 ▶ 下载对应操作系统的版本并安装,下载地址:http://www.golangtc.com/download,譬如这里下载的是go1.6.win ...

  6. 谈谈如何查看Android项目方法数

    我们都知道,Android App的方法数是有天花板的,在方法数达到65536时,就会出现打包异常,这个时候,我们需要去除一些不需要的三方工具包,或者采用多Dex技术分包,都能达到正常打包的效果. 可 ...

  7. 使用BigDecimal转换较长小数时候出现科学计数法的问题

    public static String divToString(double v1, double v2, int scale){ if (scale < 0) { throw new Ill ...

  8. Servlet 3.0 新特性详解

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...

  9. Codeforces 932E Team Work 数学

    Team Work 发现网上没有我这种写法.. i ^ k我们可以理解为对于每个子集我们k个for套在一起数有多少个. 那么我们问题就变成了 任意可重复位置的k个物品属于多少个子集. 然后我们枚举k个 ...

  10. AIM Tech Round 4 (Div. 1) C - Upgrading Tree 构造 + 树的重心

    C - Upgrading Tree 我发现我构造题好弱啊啊啊. 很明显能想到先找到重心, 然后我们的目标就是把所有点接到重心的儿子上,让重心的儿子子树变成菊花图, 这个先把重心到儿子的边连到 i , ...