ASP.NET Web API接受AngualrJS的QueryString的两种方式

ASP.NET Web API如何接受来自AngualrJS的QueryString呢?本篇体验两种方式。

第一种方式:http://localhost:49705/api/products?search=GDN

这种方式是QueryString原生的格式。

首先,把当前的域名和端口号放到一个自定义的module中去。

1 (function () {
2     "use strict";
3
4     angular.module("custommodule", ["ngResource"])
5         .constant("appSettings", {
6             serverPath: "http://localhost:49705/"
7         });
8 }());

以上,依赖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方法中设置

时间: 2024-08-06 03:45:37

ASP.NET Web API接受AngualrJS的QueryString的两种方式的相关文章

ASP.NET Web Api 实践系列(二)Get/Post方式调用Web Api

本文给出Get/Post方式访问Web Api的帮助方法,对于Put/Delete方式的调用跟Post调用类似. 一.Web Api调用帮助类 下面给出Web Api调用帮助类的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Net.Http; 4 using System.Net.Http.Headers; 5 using System.Text; 6 using System.Web; 7 8 na

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

前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到底就是安全问题,在Web API中有多种方式来实现安全,[accepted]方式来处理基于IIS的安全(通过上节提到的WindowsIdentity依赖于HttpContext和IIS认证)或者在Web API里通过使用Web API中的消息处理机制,但是如果我们想应用程序运行在IIS之外此时Win

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

本文转自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底就是安全问题,在Web API中有多种方式来实现安全,[accepted]方式来处理基于IIS的安全(通过上节提到的WindowsIdentity依赖于HttpContext和IIS认证)

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

以前使用WebForm变成时,下拉框传值只需直接在后台绑定代码就可以了.现在我们来看看在MVC中DropDownList是如果和接受从Controller传过来的值的. 第一种:使用DropDownList 控制器代码: public ActionResult Index() { //1.1查询YzSeriesEntity的数据 List<Model.YzSeriesEntity> seriesList = seriesBLL.LoadEnities().ToList(); //1.2将YzS

通过扩展让ASP.NET Web API支持JSONP

同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒绝.同源策略以及跨域资源共享在大部分情况下针对的是Ajax请求.同源策略主要限制了通过XMLHttpRequest实现的Ajax请求,如果请求的是一个"异源"地址,浏览器将不允许读取返回的内容.JSONP是一种常用的解决跨域资源共享的解决方案,现在我们利用ASP.NET Web API自身

细说Asp.Net Web API消息处理管道(二)

在细说Asp.Net Web API消息处理管道这篇文章中,通过翻看源码和实例验证的方式,我们知道了Asp.Net Web API消息处理管道的组成类型以及Asp.Net Web API是如何创建消息处理管道的.本文在上篇的基础上进行一个补充,谈谈在WebHost寄宿方式和SelfHost寄宿方式下,请求是如何进入到Asp.Net Web API的消息处理管道的. WebHost寄宿方式: 在剖析Asp.Net WebAPI路由系统一文中,我们知道Asp.Net Web API在WebHost寄

ASP.NET Web API Model-ParameterBinding

ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被直接调用的,而是要通过本篇要介绍的内容ParameterBinding的一系列对象对其进行封装调用,通过本篇的学习之后也会大概的清楚在Web API中绑定会有哪几种方式. Model-ParameterBinding(对象篇) 在ASP.NET Web API中ParameterBinding代表着

ASP.NET Web API实现缓存的2种方式

在ASP.NET Web API中实现缓存大致有2种思路.一种是通过ETag, 一种是通过类似ASP.NET MVC中的OutputCache. 通过ETag实现缓存 首先安装cachecow.server install-package cachecow.server 在WebApiConfig中. public static class WebApiConfig { public static HttpConfiguraiton Register() { var config = new H

新作《ASP.NET Web API 2框架揭秘》开始全面接受预订

我觉得大部分人都是"眼球动物",他们关注的往往都是目光所及的东西.对于很多软件从业者来说,他们对看得见(具有UI界面)的应用抱有极大的热忱,但是对背后支撑整个应用的服务却显得较为冷漠.如果我们将整个"生态系统"比喻成海面上漂浮的冰山,我们所能看的到的只是露出水面的冰山一角,水面之下才是一个"庞然大物". 提到服务,我们自然想到Web Service.但是传统意义上的Web Service却有点名不副实,因为支撑它的其实不是Web而是SOAP,承载