请问asp.net怎么实现谷歌地图api的API调用 我需要实...

1. 老规矩,先上程序 &!DOCTYPE html& &html& &head& &meta name=&viewport& content=&initial-scale=1.0, user-scalable=no& /& &meta http-equiv=&Content-Type& content=&text/ chartset=utf-8& /& &
上边有一个标题,下边分成两块,左边是地图.并且地图上有两个点,点击两个点有相应的提示信息,具体实现如下 最近要做一个网页,具体内容是:上边有一个标题,下边分成两块,左边是地图.并且地图上有两个点,点击两个点有相应的提示信息,显示数据库里最新的两条数据信息.右边是一些文字说明.本人刚开始学习,做的也不是很好 总体效果如下所示: 首先新建map.php文件,代码如下 &!DOCTYPE html& &?php /* 创建与数据库的连接 */ $conn=mysql_connect(&quot
名字:Nov_Eleven_Map 主要功能:定位,路线搜索(驾车.公交.步行) 百度地图api官网:/map/sdk-android.htm 主要用到的类: BMapManager 这个是地图引擎的管理类.要注意的地方:1.要在setContent()前使用:2.一个软件只需要一个BMapManager对象,我在主Activity把它定义为static类型的,然后在其他Activity共享使用. MapView 这个是显示地图的View Ma
最近在做一个项目的时候遇到一个问题,在Android中调用了百度地图的API,第一次进入后点击back键退出,之后再一次进入的时候发现程序会强行退出并且报错,一开始以为是关闭程序的时候没有关闭好百度地图的原因,但是看了好久都没有发现问题,最后Debug了一下,终于发现问题所在了. Android程序点击back键退出,其实并不是真的退出,它的Application依然存在与内存中,只有当手机内存不足或者是程序调用了System.exit(0);的时候,程序的Application才会关闭. 要调
java调用百度定位api服务获取地理位置示例,大家参考使用吧 import java.io.BufferedR import java.io.IOE import java.io.InputS import java.io.InputStreamR import java.io.R import java.net.URL; import java.nio.charset.C import
这篇文章主要介绍了使用百度地图api实现根据地址查询经纬度的方法,附上实例,推荐给有需要的小伙伴们. &html xmlns=&http://www.w3.org/1999/xhtml&& &head& &title&根据地址查询经纬度&/title& &meta http-equiv=&Content-Type& content=&text/ charset=utf-8&&
本文介绍了javascript使用百度地图api和html5特性获取浏览器位置的小功能,大家参考使用吧 &!DOCTYPE html& &html& &body& &p id=&demo&&点击这个按钮,获得您的位置:&/p& &button onclick=&getLocation()&&试一下&/button& &script src=&http://api.ma
这篇文章主要介绍了asp.net调用谷歌地图api的过程,需要注意js引入的先后顺序,需要的朋友可以参考下 asp.net调用谷歌地图api,需要注意js引入的先后顺序,复制一下代码即可测试 &html xmlns=&http://www.w3.org/1999/xhtml&& &head& &title&&/title&//在这里要注意js引入的先后顺序 &link href=&Mapjs/jquery.ui.base.
以前一直用高德地图的API,后来因为需求,必须用百度的地图API.这些API都已经封装的很智能了,只需要一定的编程思维,就很简单可以实现功能. 功能的大概:用户通过点击地图上面的位置,在地图上面进行描点,然后再把获取的到的地理位置保存到地图上面的地址栏目中. 主要是百度地图API的使用 var map = new BMap.Map(&allmap&); //实例化一个地图对象 var point = new BMap.Point(116..897445); //设置地
1. 百度地图API的类,需要一个HTML的元素作为容器,才能展现在网页上.如下: &div id=&container&&&/div& 2. BMap命名空间 百度地图API的类,都使用BMap作为命名空间.比如: var map = new BMap.Map(&container&); 其构造函数的参数,是HTML的容器元素.不过使用该构造函数前,要确保该HTML标签存在于该网页中了. 3. 创建一个坐标点 var point = new
1. 老规矩,先上代码 &div id=&container&&&/div& &script type=&text/javascript& src=&http://api./api?v=1.2&& var map = new BMap.Map(&container&); map.centerAndZoom(new BMap.Point(116.404, 39.915
弄了一个百度地图来标注地理位置信息,通过百度api来获取地址.这地图api是javascript版,感兴趣的朋友可以了解下,或许对你有所帮助 有时做了一些东西没有记录,而过一段时间再看的时候,有会忘记了.需要在重新在看一遍. 百度地图javascript api可以参考 /map/reference/ 示例:/map/jsdemo.htm 更多百度地图的介绍blogs
摘要: 什么是地址解析? 什么是反地址解析? 如何运用地址解析,和反地址解析? 可以同时运用地址解析,和反地址解析麼?答案是,可以的.详见最后一个示例与代码. --------------------------------------------------------------------------------- 一.地址解析 地址解析,是用户输入一个详细到门牌号的地址.例如&北京市中关村南大街27号中央民族大学&,那么地址解析接口,会返回一个经纬度Point. 接口定义如下:
今天在做地图相关的app时用到了百度的api,早就申请好了key,但是一直提示&百度未授权使用地图API.....&,很苦恼,百度了一天资料后无果,于是与百度技术人员取得联系 &html& &head& &meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /& &meta name=&viewport&
百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口 可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富.交互性强的LBS(地图类)应用程序. 百度地图Android SDK提供的所有服务是免费的,接口使用无次数限制.您需申请密钥(key)后,才可使用百度地图Android SDK.任何非营利性产品请直接使用.
摘要: 想要显示某一个区域,并且鼠标放上去,该区域就会变色.这时,你就需要巧用多边形覆盖物,和它的鼠标事件了! 快来看看去哪儿网的实例吧:/city/beijing_city/#fromDate=&from=qunarHotel&toDate= ----------------------------------------------------------------------------------
我们这里以本地局域网为例. 1. 下载Jetty包和Servlet包 jetty-all-7.0.2.v.jar servlet-api-2.5.jar 2. 编写地图网页程序 参考:http://blog.csdn.net/poechant/article/details/7107579 &html& &head& &meta name=&viewport& content=&initial-scale=1.0, user-sc
/android--1.html SDK版本v2.0.0初探 一.开发前的准备工作: 1.注册百度账号,并登录.(有百度账号的话直接登录) 2.申请Key,地址:/map/android-mobile-apply-key.htm 注:经研究发现在申请KEY时,应用名称一定要写成my_app_应用名(也就是说&my_app_&是必须要有的)这样,生成的API密钥后面才可 用.其他
周边检索:根据检索词.中心点地理坐标和半径与发起周边检索. 实现场景:查找以上海市浦东新区为中心,半径为1000米内所有的&浦东发展银行&(搜周边). 实现步骤: 一.前提条件: 搭建百度地图开发环境: 地图引擎管理对象和显示地图的View对象,都已创建并初始化: MapView对象的相关属性已设置,生命周期函数也已处理. 详见:Android 百度地图SDK (v2.0.0)初探(一楼) 二.检索以上海市浦东新区为中心,半径为1000米内所有的&浦东发展银行&(搜
&!DOCTYPE html& &html& &head& &meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /& &meta name=&viewport& content=&initial-scale=1.0, user-scalable=no& /& &style type
一个地图,可能有很多图层.以交通层为例,如下: var map = new BMap.Map(&container&); var point = new BMap.Point(123.123, 12,123); map.centerAndZoom(point, 15); map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.ScaleControl()); map.addControl(new BMa
众所周知,地球是椭球的(当然,我们可以把它看作球形).但是我们不使用地球仪,而使用地图时,使用的是平面.而这种从球形到平面的映射方式,是墨卡托发明的,并且沿用至今.在这种平面图上建立坐标系,就有了我们常见的地图. 这个坐标系,就产生了我们常说的经纬度.坐标系的原点,位于非洲的几内亚湾内,由此向东为经度的X轴正方向,向北为纬度的Y轴正方向. 根据不同的缩放级别,地图呈现不同的图块拼接. 当缩放级别为1时,地图由四块组成:(0,0),(0,-1),(-1,0),(-1,-1). 当缩放级别为15时,
用户在使用API之前需要获取百度地图移动版API Key,并且该KEY与您引用API的程序名称有关 百度地图API支持Android 1.5及以上系统. &1&API添加到Andoid工程中 必须显得下载API开发包: 必须显得下载API开发包: 解压之后包括两个文件baidumapapi.jar和libBMapApiEngine.so.在工程根目录下创建ibs\armeabi目录,并拷贝到其目录下. 在工程属性-&Java Build Path-&Libraries中选择&quo
最近要显示商家的地理位置,尝试了三家地图 百度地图api ,api功能十分强大,强大到几乎不用编写什么代码了: sougou地图api,加载js时把原页面的css给搞乱了,api功能没有百度强悍: soso地图api,也挺好的,功能还没有怎么用 搜狗和soso的地图上的信息比百度的信息多一些,但公交.路线.站点的查询api没百度强,百度甚至有autocomplete控件可以使用 同一个GPS坐标在三者的地图中显示位置不一样.
1.进入:http://api./lbsapi/creatmap/ (创建地图-百度地图API所见即所得工具,百度官方地址,大家放心使用) 2.切换城市,搜索需标注位置.(如下图:) 2.设置地图:大家可以对网站显示地图的宽高进行设置,其余选项不动. 3.添加标注:点击第一个图标后,在右侧找到自己的位置,单击鼠标左键可定位.标记图标处可更换图标形状,名称和备注填入位置相关信息.(如下图:) 4.完成以上3步后,点获取代码.
官方网址:/map/jshome.htm http://api./lbsapi/creatmap/ 案例: &!DOCTYPE html& &html& &head& &meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /& &meta name=&quo
一.授权 这部分就不多说了,请看百度地图API 需记录注册完后的,应用访问ak以及安全码(创建时候填写的,如果忘记点设置查看下) 二.创建工程,完成上一篇日志的操作. 完成后,在plist文件中,找到Bundle identifier,修改内容为你的安全码(极其关键!!!) 按照以上步骤操作,基本无误.
使用的版本是百度地图Android版4.2.有个不好的是,百度地图API在各个版本之间似乎有较大的变化. 1. GPS调整 手机采样的GPS需要经过百度提供的转换接口,转换Wie百度地图内部的加密数据格式,不然会存在较大的误差. CoordinateConverter converter = new CoordinateConverter(); converter.from(CoordType.GPS); LatLng sourceLatLng = new LatLng(location.get
在使用百度地图中,申请密钥是重要的一个环节,并且百度为了给用户提供更优质的服务,iOS SDK自v2.0.2版本开始采用了全新的Key验证体系.因此,当您选择使用v2.0.2及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请,本博客主要通过百度地图SDK3.1.0版本的Demo展开讨论. 一.进入官网,下载Demo 1. 在网站输入网址: /map/ 进入百度地图API首页.以此选择开发,Android地图SDK.进入And
概述 很多网站上都会有联系方式和地址,为了能更直观的显示出地址的具体位置,很多网站都在地址下面添加百度地图,下面就为大家介绍在AEAI Portal门户集成平台中为网站添加百度地图的方法. 步骤 1. 打开百度地图生成器的网址http://api./lbsapi/createmap/index.html 2. 在这里填入您的地址,标注等,然后点击下面获取代码的按钮,把代码复制下来即可,这只是其中的一款模板,您也可以选择别的模板,下面是我获取到的代码. &!DOCTYPE
首先引用百度 script &script type=&text/javascript& src=&http://api./api?type=quick&ak=百度密钥&v=1.0&&&/script& 然后 javascript : // 百度地图API功能 var map = new BMap.Map(&allmap&); var point = new BMap.Point(
首先要引用百度地图的 &scrtipt&: &script type=&text/javascript& src=&http://api./api?v=2.0&ak=百度密钥&&&/script& &script type=&text/javascript& src=& & rel=&nofollow&&http://deve
// 定义一个控件类,即function function ZoomControl(){ // 默认停靠位置和偏移量 this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT; this.defaultOffset = new BMap.Size(10, 10); } // 通过JavaScript的prototype属性继承于BMap.Control ZoomControl.prototype = new BMap.Control(); // 自定义控件必须实现自己的
// 百度地图API功能 var map = new BMap.Map(&allmap&); var point = new BMap.Point(116..897445); map.centerAndZoom(point,12); // 创建地址解析器实例 var myGeo = new BMap.Geocoder(); // 将地址解析结果显示在地图上,并调整地图视野 myGeo.getPoint($scope.address.to_addr, function(
// 百度地图API功能--计算距离 var map = new BMap.Map(&allmap&); var pointA = new BMap.Point( Longitude , Latitude ); // 创建点坐标A var pointB = new BMap.Point( Longitude , Latitude ); // 创建点坐标B alert('两点的距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+' 米.')
借鉴地址:/jz1108/archive//2107199.html /jz1108/tag/%E5%9C%B0%E5%9B%BEAPI/
近期业界流传百度将借在手机地图的发力切入LBS (基于位置的服务)市场的传言,百度今天回应称,百度地图暂无进入LBS市场的计划.百度地图会专注于为第三方合作伙伴提供API支持. 引起此前外界误解的主要原因在于,百度手机地图即将首次支持&好友位置即时共享&功能.这一功能被认为类似于国外的Foursquare以及国内的玩转四方.街旁等提供的check-in(签到) LBS相关服务. 百度地图相关负责人称,&好友位置即时共享功能&将在预计数周后发布的百度地图Android
这是利用百度地图提供的API做的应用,因为他们提供的地图使用是免费的,所以这个应用也是免费使用的,需要说明的是,在使用前需要注册和登录,否则是没办法使用. 使用人群: 1.需要把自己的位置告诉他人的: 2.商户需要标注自己企业的位置,以便他人可以轻松知道商户的企业位置.这个在百度地图上也有这方面的功能,大家可以去看看: 3.社区网站中的人,查找地图位置: 使用方法: 1.新用户,直接注册,菜单就有地图菜单的功能. 2.老用户,登录进去以后,需要 在菜单的最下面有个&添加&的按钮,点击添
最近项目中百度地图的相关操作 当没有坐标的时候默认通过城市名称获取中心点,不过感觉有点慢 到网上搜索了一下也没类似的城市对应的价格的数据库.所以自己就建了一个. 现公开出来供大家使用 接口调用方法 http://2./map/?city=北京 返回json串 {&x&:&116.403874&,&y&:&39.914889&} 注 1.城市名请用UTF-8编码否则会出错 2.如返回 please
通过百度地图获取公交线路的站点坐标的js代码,需要的朋友可以参考下 最近做百度地图的模拟数据,需要获取某条公交线路沿途站点的坐标信息,貌似百度没有现成的API,因此做了一个模拟页面,工具而已,IE6/7/8不支持 &!DOCTYPE html& &html& &head& &meta charset=&utf-8& /& &title&获取公交站点坐标&/title& &style type=&te
这篇文章主要介绍了android实现百度地图自定义弹出窗口的功能,大家参考使用吧 我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图最新的Android SDK中,没有方便操作这种弹出窗口的类,虽然有一个PopupOverlay,但是它只支持将弹出内容转化为不多于三个Bitmap,如果这个弹出窗口里想有按钮来响应点击事件,用这个就不能满足要求了,于
在线互联网地图我先前曾经介绍过不少,但是支持API(Application Programming Interface,应用程序编程接口)的却不多,使用地图API,开发者可以非常方便的调用在线地图中的资源,实现各种各样的地图第三方应用,下面我就介绍几个开放了API的互联网地图. Google Maps API : Google Maps API 基于Google Maps,能够使用 JavaScript 将 Google Maps 嵌入网页中.API 提供了大量实用工具用以处理地图,并通过各种服
当前为iOS提供的SKD版本为1.2.1,这里主要讲一下这个版本存在的一些问题,以及开发注意事项. 1. BMKMapView是百度地图类,当创建多个BMKMapView对象时,这些对象会共享一些数据(没有仔细研究具体共享哪些数据),因此会产生以下问题: A. 当对其中一个BMKMapView通过手势来进行放大.缩小.移动等操作时,其他的BMKMapView对象会自动进行放大.缩小.移动. B. 启动应用程序时,首先显示出来的BMKMapView可以得到用户的当前位置,其他的BMKMapView
1.AVD版本不对应Android程序启动不起来 源码见此处:/map/wiki/index.php?title=androidsdk/guide/hellobaidumap,错误如下: 找了很久其实不是API的问题,也不是程序的问题而是AVD 模拟器的问题,我用的是Android的4.4.w所以虚拟机也要创建相同的版本,不然又意想不到的事情发生. 2.签名验证失败调用地图API地图无法显示 总是出现如下图所示的界面: 这是由于SHA1签名不匹
阐述一个概念,地图覆盖物:所有叠加或覆盖到地图的内容,我们统称为地图覆盖物.如标注.矢量图形元素(包括:折线和多边形和圆).定位图标等.覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动. 要实现的需求:假如我们知道北京天安门(建筑物)的GPS纬度经度值:39.915,116.404,想要把它在百度地图上标注出来. 实现上述需求的步骤: 一.准备工作: 1.创建android工程,并导入百度地图需要用到的jar包和so文件. 2.在AndroidManifest文件中添加使用百度地
前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来也做一个类似空气质量报告的报表+拓扑图应用,于是有了下面的Demo: 在这个Demo中,将GraphView拓扑图组件添加到百度地图组件中,覆盖在百度地图组件之上,并且在百度地图组件上和GraphView拓扑图组件上分别添加事件监听,相互同步经纬度和屏幕位置信息,从而来控制拓扑图上的组件位置固定在地
这篇文章主要介绍了在jquery boxy中添加百度地图坐标拾取注意流程,需要的朋友可以参考下 作为开发的初学者,这东西仅仅作为个人备份,如果能帮到忙也也不错(我开发用的php,但这是js这本身没多大影响) 这里要说明几个问题: 1.boxy调用的页面中不能出现&script&标签不然不能显示 2.boxy调用的时候要注意流程,要先加载出boxy然后再去渲染地图到boxy页面中 3.百度地图的加载js应放在弹出boxy的那个页面中 注意流程:boxy页面其实为单独的一个页面只是用了ajax中$
本文给大家介绍的是如何使用百度地图的自定义控件,附上示例,分享给大家,小伙伴们根据自己的需求稍微改动下即可使用. 废话不多说了,直接奉上代码; &script& var map = new BMap.Map('allmap'); var Bcenter = new BMap.Point(116.404,39.915); map.centerAndZoom(Bcenter,11); //自定义控件 function staticControl(){ this.defaultAnchor = BM
本文将详细介绍下如何使用百度地图JSAPI生成的H7N9感染分布图,有对百度api感兴趣的朋友可以参考下哈,希望可以帮助到你 下图为使用百度地图JSAPI生成的H7N9感染分布图示例,其中的数据来自新华网(4.8号),截图如下: 使用的功能列表如下: 1.自定义版权控件功能,即(1)对应的数据来源部分,代码如下: var cr = new BMap.CopyrightControl({anchor: BMAP_ANCHOR_TOP_RIGHT}); map.addControl(cr); //添
采用CSS覆盖的方法就可以了,但是官方是不允许这么做的,具体实现如下,感兴趣的朋友可以参考下 采用CSS覆盖的方法就可以了,但是官方是不允许这么做的,参考:/map/question.htm &!DOCTYPE html& &html& &head& &meta charset=&utf-8&/& &title&javascript移除百度地图LOGO和版权信息&/ti
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.061 (s). 9 q(s)&>&&>&&>&&>&C# Asp.net百度地图开发源码(ApI调用)
C# Asp.net百度地图开发源码(ApI调用)
上传大小:4.32MB
资源描述:
基于百度地图api建立的地图定位,移动,搜索,与计算等功能.
详细功能包括:
地图过2秒移动中心点
地图控件创建
步行路线导航
步行路线覆折线
3D地图切换
经纬度查询
三维地图导航
自定义标注与百度地址实现导航
2D和3D地图切换并实现导航
百度查询接口耗时
综合评分:4(2位用户评分)
所需积分:2
下载次数:45
审核通过送C币
创建者:qq_
创建者:nigelyq
创建者:doomlord
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
C# Asp.net百度地图开发源码(ApI调用)
会员到期时间:剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:下次自动登录
现在的位置:
& 综合 & 正文
ASP.NET Web API详解
在这篇中我们将讨论Web API设计、概念、功能,和对比Web API与WCF。
1. 实现一个Web API项目
我们从一个简单的实例开始讨论。我们使用Visual Studio 2012做为开发环境。我们第一步是基于Web API模版创建一个ASP.NET MVC 4.0项目,如图1所示:
图1:基于Web API模板创建一个ASP.NET MVC 4项目
下一步,我们在model文件夹创建一个简单的数据模型。在解决方案资源文件夹中右键点击Model文件夹,选择Add -& Class,如图2所示:
图2:添加新的数据模型
这只是一个教程,我定义一个产品数据模型,如表1所示。
public class Product
public int Id
public string Name
public string Category
public decimal Price
表1: 定义产品模型
创建产品数据模型后,我们可以在Controllers文件夹中创建一个新的API控制器,用来处理产品数据模型。默认情况下,一个基于Web API模版的MVC项目可以添加两个控制器: 一个继承于Controller类,另一个继承于ApiController类。在解决方案资源文件夹中右击Controllers文件夹,在弹出窗口中选择“Empty API controller”,添加一个新的controller。如图3所示:
图3:添加Empty API controller
Controller如表2所示:
public class ProductsController : ApiController
List&Product& products = new List&Product&();
public IEnumerable&Product& GetAllProducts()
GetProducts();
private void GetProducts()
products.Add(new Product {Id = 1, Name = "Television", Category="Electronic", Price=82000});
products.Add(new Product { Id = 2, Name = "Refrigerator", Category = "Electronic", Price = 23000 });
products.Add(new Product { Id = 3, Name = "Mobiles", Category = "Electronic", Price = 20000 });
products.Add(new Product { Id = 4, Name = "Laptops", Category = "Electronic", Price = 45000 });
products.Add(new Product { Id = 5, Name = "iPads", Category = "Electronic", Price = 67000 });
products.Add(new Product { Id = 6, Name = "Toys", Category = "Gift Items", Price = 15000 });
public IEnumerable&Product& GetProducts(int selectedId)
if (products.Count() & 0)
return products.Where(p =& p.Id == selectedId);
GetProducts();
return products.Where(p =& p.Id == selectedId);
表2:添加ApiController类到实例项目
运行项目并连接到API,通过“/api/Products”,例如: 。你也可以传递SelectedId参数去调用GetProducts方法,例如:
2. 传递复杂的对象给Web API的方法
在Web API中传递一个简单的对象是容易的,但是大部分情况下,你需要传递一个复杂的对象参数。你可以通过[FromUrl]或[FromBody]属性来传递对象。[FromBody]属性从request body里面读取数据。但是,这个属性在方法的参数列表中只能使用一次。
让我们用代码段去解释使用复杂参数的重要性,如表3所示:
public class SampleController : ApiController
/// &summary&
/// Get time
/// &/summary&
/// &param name="t"&&/param&
/// &returns&&/returns&
public string GetTime(Time t)
return string.Format("Received Time: {0}:{1}.{2}", t.Hour, t.Minute, t.Second);
public class Time
public int Hour { }
public int Minute { }
public int Second { }
表3:给方法传递复杂的参数
现在,让我们使用Hour,Minute和Second参数给GetTime方法传值。你可以看见它出错了,返回空引用错误。如图4所示:
图4:当调用GetTime方法时出错了
虽然我们已经意识到输入值需要关联到Time对象,但是API方法不能正确地映射输入值与对象属性。现在我们看看,是否修改代码去包含[FromUri]属性能够处理URL查询字符串里的复杂对象。下面的片段中我们在Time对象前申明了[FromUri]属性:
public string GetTime([FromUri] Time t)
{ -------------------}
现在我们通过这个方法,传递相同的值,将会有不同的结果,如图5所示:
图5:调用GetTime方法成功
3. 使用HttpClient API
HttpClient是一个可扩展API,可以通过Http方式访问任何服务或网站。这个HttpClient被引进到WCF Web API, 而且现在.NET Framework 4.5中的ASP.NET Web API也有了这个功能。你可以在后台和services(例如:WCF)中使用HttpClient去访问Web
这个代码段创建了一个HttpClient对象并且异步访问实例中的API方法。
// asynchronous accessing of web api method
async Task GetData()
StringBuilder result = new StringBuilder();
// Define the httpClient object
using (HttpClient client = new HttpClient())
// Define the base address of the MVC application hosting the web api
// accessing the web api from the same solution
client.BaseAddress = new Uri(HttpContext.Current.Request.Url.AbsoluteUri);
// Define the serialization used json/xml/ etc
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
// Call the method
HttpResponseMessage response = client.GetAsync("api/products").R
if (response.IsSuccessStatusCode)
// Convert the result into business object
var products = response.Content.ReadAsAsync&IEnumerable&Product&&().R
foreach (var p in products)
result.Append(string.Format("{0} --- [Price: {1} Category: {2}] ", p.Name, p.Price, p.Category));
result.Append(string.Format("Error Code:-{0}
Error Details: {1}", (int)response.StatusCode, response.ReasonPhrase));
data.Text = result.ToString();
表4:创建一个HttpClient对象去访问实例中的API方法
4. 用jQuery访问Web API
在Html5 Web应用中,你可以使用jQuery直接访问Web API。你可以使用getJSON()方法调用API得到结果,然后取出业务对象。jQuery能识别内部字段关联的业务对像,例如:data[i].Price。
这个代码段演示了从Product API方法查找数据并显示数据到一个表格。
&title&&/title&
&script src="Scripts/jquery-1.8.2.js"&&/script&
&script type="text/javascript"&
$.getJSON("api/products",
function (data) {
//Clear the div displaying the result
$("#productView").empty();
//Create a table and append the table body
var $table = $('&table border="2"&');
var $tbody = $table.append('&tbody /&').children('tbody');
//data - return value from the Web API method
for (var i = 0; i & data. i++) {
//add a new row to the table
var $trow=$tbody.append('&tr /&').children('tr:last');
//add a new column to display Name
var $tcol = $trow.append("&td/&").children('td:last')
.append(data[i].Name);
//add a new column to display Category
var $tcol = $trow.append("&td/&").children('td:last')
.append(data[i].Category);
//add a new column to display Price
var $tcol = $trow.append("&td/&").children('td:last')
.append(data[i].Price);
//display the table in the div
$table.appendTo('#productView');
&div id="productView"&&/div&
表5:使用jQuery从Product API方法查找数据
5. 在jQuery中传递参数
另外,从Web API方法查找数据,你可以使用jQuery去传递参数。jQuery支持多个方法传递参数。第一个方法是使用单个的参数。下面的代码段演示了如何去传递单个参数:
$.getJSON("api/products",
{ selectedId: '4' },
function (data) {
你也可以在一个集合中传递多个参数,示范如下:
$.getJSON("api/products",
{ selectedId: '4', name: 'TV' },
function (data) {
另外一个方法,你可以直接把参数放在URL中,示范如下:
$.getJSON("api/products?selectedId =4",
function (data)
第一个方法从URL中分开了查询字符和参数,这个适用于复杂的或多个数据传递。第二个方法更适用于一个或两个参数的情况。
6. Web API代码框架
ASP.NET Scaffolding是一个ASP.NET的Web应用代码生成框架。Visual Studio包含预安装代码生成器,用于MVC和Web API项目。Visual Studio自动生成需要的API代码在指定的数据模型和数据源中执行多种操作。
基于代码框架的Entity Framework
验证Web API项目中代码框架如何工作,我们可以使用Entify Framework去定义我们的数据库并且生成Web API方法。首先,我们需要添加一个ADO.NET entity数据模型,用来定义数据。我们的实例数据将基于两张表,Couse和Status,如图6所示:
图6:基于Course和Status表添加一个entity数据模型
定义数据模型后,我们可以生成与数据模型一致的Web API controller。右击Controller,然后点击Add Controller,将会弹出Add Controller窗口。在Controler name的输入框,输入Controller name。从Template下拉列表中,选择API controller with read/write actions, using Entity Framework模板,如图7所示:
图7:基于数据模型添加一个Controller
下一步,从Model class下拉列表中选择一个表,在Data context class下拉列表中指定数据context。表6展示的是CourseController API controller自动生成的代码。它包含了get,put,post,和delete方法,这些方法和model一致。
public class CourseController : ApiController
private SampleDBEntities db = new SampleDBEntities();
// GET api/Course
public IEnumerable&Course& GetCourses()
return db.Courses.AsEnumerable();
// GET api/Course/5
public Course GetCourse(int id)
Course course = db.Courses.Single(c =& c.CourseId == id);
if (course == null)
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
// PUT api/Course/5
public HttpResponseMessage PutCourse(int id, Course course)
if (!ModelState.IsValid)
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
if (id != course.CourseId)
return Request.CreateResponse(HttpStatusCode.BadRequest);
db.Courses.Attach(course);
db.ObjectStateManager.ChangeObjectState(course, EntityState.Modified);
db.SaveChanges();
catch (DbUpdateConcurrencyException ex)
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
return Request.CreateResponse(HttpStatusCode.OK);
// POST api/Course
public HttpResponseMessage PostCourse(Course course)
if (ModelState.IsValid)
db.Courses.AddObject(course);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, course);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = course.CourseId }));
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
// DELETE api/Course/5
public HttpResponseMessage DeleteCourse(int id)
Course course = db.Courses.Single(c =& c.CourseId == id);
if (course == null) {
return Request.CreateResponse(HttpStatusCode.NotFound);
db.Courses.DeleteObject(course);
db.SaveChanges();
catch (DbUpdateConcurrencyException ex)
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
return Request.CreateResponse(HttpStatusCode.OK, course);
protected override void Dispose(bool disposing)
db.Dispose();
base.Dispose(disposing);
表6:CourseController API controller生成的代码
Web API代码框架功能减少了开发人员对常用增删改查功能的操作步聚。
7. ASP.NET Web API路由规则
Web API使用统一的路由选择器(URIs)实现多种行为。在解决方案资源文件夹的App_Start文件夹有一个WebApiConfig文件,它为Web API定义了不同的路由机制。这个机制基于http方法、动作和属性。但是,我们可以定义我们自己的路由机制来支持自定义路径。
例如,在我们的Web API项目实例中,我们使用/api/Products去接收产品详情。但是,我们想用api/Products/GetAllProducts替换,可以修改默认的路由逻辑,需要在URI中包含{action},代码片断如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
更新规则后,我们可以在Web API方法上使用ActionName属性去指定action名字,代码片断如下:
[ActionName("GetAllProducts")]
public IEnumerable&Product& GetAllProducts()
{……………………………..}
注意:使用[NonAction]属性可以指明Web API方法不是一个API action方法。
我们可以使用一个Http方法或Acceptverbs属性去指定用何种HTTP动作连接Web API方法。下面的代码片断使用了HttpGet和HttpPost方法:
public IEnumerable&Product& GetProducts(int selectedId)
{………….. }
[HttpPost]
public void AddProduct(Product p)
{………….. }
另一种方式,使用Acceptsverbs属性,如下代码断:
[AcceptVerbs("GET","PUT")]
public IEnumerable&Product& GetProducts(int selectedId)
{………….. }
Web API 2提倡尽可能使用属性。更多详情请查看文件:。
Web API支持很多序列化方法,包括XML,JSON,和MessagePack。在下面的章节,我们将研究下如何去执行这三个方法,并比较他们。在学习之前,我们修改Web API项目的实例代码去返回大块的数据,这样我们可以更好的理解和比较序列化的作用。表7展示如何用GetProducts()方法返回大块数据。
private void GetProducts()
for (int i = 0; i & 5000; i++)
products.Add(new Product { Id = i, Name = "Product -
Category = "The ASP.NET and Visual Web Developer teams have released the ASP.NET and Web Tools 2012.2 update, which extends the existing ASP.NET runtime and adds new web tooling to Visual Studio 2012. Whether you use Web Forms, MVC, Web API, or any other ASP.NET technology, there is something cool in this update for you.",
Price = 1 });
表7:更新GetProducts()方法
9. 使用JSON序列化
Web API使用JSON做为默认的序列化方法。这样,当你运行Web API项目,自动返回为JSON格式。例如,接收Products详情,你只需要使用;&server&&:&&port&&/api/Products去得到JSON格式的结果。
使用XML序列化
在Web API项目中使用XML序列化,你必须修改Global.aspx文件在Application_Start()方法插入下面两行代码:
GlobalConfiguration.Configuration.Formatters.RemoveAt(0);
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer =
执行XML序列化方法后,你可以使用;&server&&:&&port&&/api/Products查看详情。
使用MessagePack序列化
要使用MessagePack方法,你必须先安装MessagePack()。MessagePack可通过Nuget添加和管理。你也可以从GitHub下载源码,并在Visual
Studio中生成应用。
当你安装了MessagePack,把MsgPack.dll引用到MessagePack library。下一步,创建一个自定义的媒体类型格式,这个格式用来序列化Web API数据。表8是GitHub上展示的媒体类型格式()。
public class MediaTypeFormatterCompatibleMessagePack : MediaTypeFormatter
private readonly string _mime = "application/x-msgpack";
Func&Type, bool& IsAllowedType = (t) =&
if (!t.IsAbstract && !t.IsInterface && t != null && !t.IsNotPublic)
if (typeof(IEnumerable).IsAssignableFrom(t))
public MediaTypeFormatterCompatibleMessagePack()
SupportedMediaTypes.Add(new MediaTypeHeaderValue(_mime));
public override bool CanWriteType(Type type)
if (type == null)
throw new ArgumentNullException("Type is null");
return IsAllowedType(type);
public override Task WriteToStreamAsync(Type type, object value, System.IO.Stream stream, HttpContent content, TransportContext transportContext)
if (type == null)
throw new ArgumentNullException("type is null");
if (stream == null)
throw new ArgumentNullException("Write stream is null");
var tcs = new TaskCompletionSource&object&();
if (type != typeof(string) && typeof(IEnumerable).IsAssignableFrom(type))
value = (value as IEnumerable&object&).ToList();
var serializer = MessagePackSerializer.Create&dynamic&();
serializer.Pack(stream, value);
tcs.SetResult(null);
return tcs.T
public override Task&object& ReadFromStreamAsync(Type type,Stream stream, HttpContent content, IFormatterLogger formatterLogger)
var tcs = new TaskCompletionSource&object&();
if (content.Headers != null && content.Headers.ContentLength == 0)
var serializer = MessagePackSerializer.Create(type);
using (var mpUnpacker = Unpacker.Create(stream))
mpUnpacker.Read();
result = serializer.UnpackFrom(mpUnpacker);
tcs.SetResult(result);
catch (Exception e)
if (formatterLogger == null)
formatterLogger.LogError(String.Empty, e.Message);
tcs.SetResult(GetDefaultValueForType(type));
return tcs.T
public override bool CanReadType(Type type)
if (type == null)
throw new ArgumentNullException("type is null");
return IsAllowedType(type);
表8: 创建一个MessagePack媒体类型格式。
创建媒体类型格式后,你必须更新Global.asax。Application_Start()方法插入下面两行代码:
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new MediaTypeFormatterCompatibleMessagePack());
比较序列化方法:
你可以使用Fiddler工具测试Web API中的JSON,XML,和MessagePack序列化,选择Request Builder标签。在Request Builder中输入MessagePack Web API地址,并且在Request Header添加application/x-msgpack的Content-Type,如图8:
图8:Fiddler工具中的Request Builder
现在,点击Execute按钮去调用Web API方法。重复以上步骤去添加基于JSON和XML的Web API方法,不需要设置Content-Type。对比结果,如图9:
图9:在Fiddler方法中对比序列化方法
如上图所示,结果是messagepack压缩最小。JSON的尺寸要比XML小。
10. 从XML文档中生成帮助页面
默认情况下,Web API提供帮助页面,叙述项目中API方法的定义。根据方法定义中的XML文档,我们可以生成帮助页面。
创建帮助页面,打开资源管理器中的Areas,并打开HelpPageConfig.cs文件,如图10所示:
图10:在Web API项目实例中打开HelpPageConfig.cs
在HelpPageConfig.cs中,取消注释语句:
config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));
下一步,在项目属性的Build章节的XML documentation file选项中选择启用XML documentation,复制config文件中指定的文件名到XML documentation filet选项,如图11所示。
图11:在Web API project项目中启用XML docmentation file
现在我们在API controller实例中添加XML文档,如表9所示。只需要每个方法定义前面指定”///“,得到这个方法默认的XML文档。进一步修改注解内容。
/// &summary&
/// Get All products for our Sample
/// &/summary&
/// &returns&&/returns&
public IEnumerable&Product& GetAllProducts()
---------------
/// &summary&
/// Return the details of selected product depends on the product id passed.
/// &/summary&
/// &param name="selectedId"&&/param&
/// &param name="name"&&/param&
/// &returns&&/returns&
public IEnumerable&Product& GetProducts(int selectedId)
------------------
表 9: 在API controller实例中添加XML文档
一旦你更新完controller,运行应用并点击屏幕右上方的API链接,如图12:
图12:查看应用窗口中的API链接
注意XML文档注释已经添加到Controller,如图13。
图13:在Web API帮助文件中显示注释
11. 对比WCF与Web API
WCF支持多种协义和messaging格式。在Web API中,我们只可以创建基于HTTP的服务。显然,WCF也可以创建HTTP服务,但是他里面隐藏了个别的抽象层。另外,WCF的执行要比Web API复杂。WCF中的HTTP执行使用的是Post方式,并且我们不能使用HTTP协义相关的主要功能,例如缓存和HTTP状态代码。使用Web API,我们可以执行所有的动作,如Get,Post,和Put,并且我们可以使用HTTP协义的多种功能。
WCF需要复杂的生成和地址操作,还有配置,但是Web API简单并直接的使用。Web API也是创建RESTfull服务的较好选择。通过这篇文章你能看到WCF和Web API的详细对比:.
使用jQuery传递复杂的数据类型给Web API方法,可以用JSON.Stringify。
例如:下面的代码代显示你可以传递自定义数据”user“给Web API方法
var user = {};&br /&
user.name = 'Mathew';&br /&
user.job = 'ITA';&br /&
user.rating = 'Good';
$.getJSON("api/getEmployeeDetail",&br /&
{JSON.stringify(user)},&br /&
function (data) { ......}&br /& );
&&&&推荐文章:
【上篇】【下篇】}

我要回帖

更多关于 谷歌地图api 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信