MVC项目开发中那些用到的知识点(WCF Rest在MVC项目中的两种调用方式)
2013-04-15 22:02
399 查看
前言
首先我们来了解一下WCF Rest吧。
Rest是一种设计风格,不是一个标准。
Rest通常使用HTTP,URI,XML,HTML等流行的协议和标准。
Rest是从资源的角度来观察网络的,而资源是由URI来指定的。
Rest对资源的操作类型通常包括:获取,创建,删除和修改,这四种操作分别对应着HTTP协议请求的GET,POST,DELETE和PUT方法。
资源的表现形式可以为:XML,HTML,JSON的文本。
Rest是服务端-客户端结构中的一种应用方法。
Rest使用的是HTTP协议,因此是无状态的。
Rest在Asp.Net Mvc中的使用
第一步:先来创建一个Asp.Net Mvc3.0的Web项目。
第二步:创建一个类库,然后添加一个接口和实现。
接口代码
接口实现
接口的实现还添加[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
当然还需要在Web.config中进行配置
第三步:在Global.asax.cs中添加Rest路由
先修改原路由代码
主要是对Rest进行过滤。
然后添加针对Rest的路由
运行Web项目
看这三个结果,正好与服务实现相对应。
在Mvc控制器中来调用Rest服务的实现
这样GetResult就是我们想要获取的值。
通过JavaScript来调用Rest服务
我们通过GetRestXML()来调用Rest服务获取数据,返回XML,然后通过Microsoft.XMLDOM来获取XMl节点数据。我将Js函数放在Index视图的Window.onload事件中,就是在主页面加载完毕后执行。
效果如下。
总结
以上就是asp.net mvc 中如何调用Rest服务的两种方式。看起来很是很简单的, 我也只是很简单的实现了调用,当然需要优化的地方还是很多的。
示例代码下载地址 http://files.cnblogs.com/aehyok/WCFREST.rar
首先我们来了解一下WCF Rest吧。
Rest是一种设计风格,不是一个标准。
Rest通常使用HTTP,URI,XML,HTML等流行的协议和标准。
Rest是从资源的角度来观察网络的,而资源是由URI来指定的。
Rest对资源的操作类型通常包括:获取,创建,删除和修改,这四种操作分别对应着HTTP协议请求的GET,POST,DELETE和PUT方法。
资源的表现形式可以为:XML,HTML,JSON的文本。
Rest是服务端-客户端结构中的一种应用方法。
Rest使用的是HTTP协议,因此是无状态的。
Rest在Asp.Net Mvc中的使用
第一步:先来创建一个Asp.Net Mvc3.0的Web项目。
第二步:创建一个类库,然后添加一个接口和实现。
接口代码
namespace WCFLib { [ServiceContract] public interface IRestService { [WebGet(UriTemplate = "/Test/{Param}/XML", ResponseFormat = WebMessageFormat.Xml)] string Test(string Param); } }
接口实现
namespace WCFLib { [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public class RestService:IRestService { public string Test(string Param) { switch (Param) { case"1": return "Hello WCF Rest!"; case"2": return "Hello Asp.Net Mvc3.0 WCF Rest!"; default: return Param; } } } }
接口的实现还添加[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
当然还需要在Web.config中进行配置
<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> </system.serviceModel>
第三步:在Global.asax.cs中添加Rest路由
先修改原路由代码
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值 new { controller = @"^\b(?!(RestTest))\w*\b$" } ///此处采用参数constraints,针对Controller进行正则匹配,如果Controller中含有GetRegSourceData的字符串,则过滤掉不执行此路由 ); }
主要是对Rest进行过滤。
然后添加针对Rest的路由
routes.Add(new ServiceRoute("RestTest",new WebServiceHostFactory(),typeof(RestService)));
运行Web项目
看这三个结果,正好与服务实现相对应。
public string Test(string Param) { switch (Param) { case"1": return "Hello WCF Rest!"; case"2": return "Hello Asp.Net Mvc3.0 WCF Rest!"; default: return Param; } }
在Mvc控制器中来调用Rest服务的实现
public ActionResult About() { string StrUri = "http://" + this.Request.Url.Authority + "/RestTest/" + "Test/" + "1" + "/XML"; HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(StrUri); HttpWebResponse _response = (HttpWebResponse)_request.GetResponse(); StreamReader _reader = new StreamReader(_response.GetResponseStream(), Encoding.UTF8); string _returnXML = _reader.ReadToEnd(); _reader.Close(); _response.Close(); string GetResult = GetMetaByName("string", _returnXML); return View("About",null,GetResult); } public static string GetMetaByName(string _name, string _meta) { XmlDocument doc = new XmlDocument(); doc.LoadXml(string.Format("<XmlText>{0}</XmlText>", _meta)); XmlNodeList elemList = doc.GetElementsByTagName(_name); if (elemList.Count > 0) { return elemList[0].InnerXml; } else { return ""; } }
这样GetResult就是我们想要获取的值。
通过JavaScript来调用Rest服务
<script type="text/javascript"> window.onload = function () { var _xml = GetRestXML(); var XmlDoc = new ActiveXObject("Microsoft.XMLDOM"); XmlDoc.async = "false"; XmlDoc.loadXML("<XmlData>" + _xml.xml + "</XmlData>"); var ArrTableNode = XmlDoc.getElementsByTagName("string"); alert(ArrTableNode[0].text); } function GetRestXML() { if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } //岗位id要从url取 xmlhttp.open("GET", "../RestTest/Test/2/XML", false); xmlhttp.send(); return xmlhttp.responseXML; } </script>
我们通过GetRestXML()来调用Rest服务获取数据,返回XML,然后通过Microsoft.XMLDOM来获取XMl节点数据。我将Js函数放在Index视图的Window.onload事件中,就是在主页面加载完毕后执行。
效果如下。
总结
以上就是asp.net mvc 中如何调用Rest服务的两种方式。看起来很是很简单的, 我也只是很简单的实现了调用,当然需要优化的地方还是很多的。
示例代码下载地址 http://files.cnblogs.com/aehyok/WCFREST.rar
相关文章推荐
- MVC项目开发中那些用到的知识点(Asp.Net Mvc3.0 Areas)
- MVC项目开发中那些用到的知识点(将cshtml文件编译成dll文件)
- MVC项目开发中那些用到的知识点(js css优化-- 合并和压缩)
- MVC项目开发中那些用到的知识点(Ajax.BeginForm)
- MVC项目开发中那些用到的知识点(MvcContrib分离ASP.NET MVC项目)
- MVC项目开发中那些用到的知识点(js css优化
- MVC项目开发中那些用到的知识点(登录权限认证)
- MVC项目开发中那些用到的知识点(MVC IModelBinder)
- MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)
- MVC项目开发中那些用到的知识点(将cshtml文件编译成dll文件)
- WCF .NET REST调用方式
- C#动态调用WCF接口,两种方式任你选。
- 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)
- maven项目开发能用到的所有知识点总结
- java调用rest风格web服务的两种方式
- MVC中使用AJAX方式调用数据(microsoft,jquery两种方式)
- 开发过程中两种项目管理方式
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
- 调用WCF返回Josn的两种方式
- 起步X5开发HTML5通过ajax调用WebService服务,调用的两种方式SOAP和Result