MVC项目开发中那些用到的知识点(WCF Rest在MVC项目中的两种调用方式)

简介: 前言   首先我们来了解一下WCF  Rest吧。 Rest是一种设计风格,不是一个标准。 Rest通常使用HTTP,URI,XML,HTML等流行的协议和标准。 Rest是从资源的角度来观察网络的,而资源是由URI来指定的。

前言

  首先我们来了解一下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

目录
相关文章
|
前端开发 Java 数据库
MVC项目导入
MVC项目导入
44 0
|
14天前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
1月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
34 1
Spring MVC——项目创建和建立请求连接
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
54 2
|
3月前
|
前端开发 Java 测试技术
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
单元测试问题之在Spring MVC项目中添加JUnit的Maven依赖,如何操作
|
6月前
|
前端开发 Java 数据格式
10个知识点让你读懂spring MVC容器
随着 Spring Boot 逐步全面覆盖到我们的项目之中,我们已经基本忘却当年经典的 Servlet + Spring MVC 的组合,那让人熟悉的 web.xml 配置。而本文,我们想先抛开 Spring Boot 到一旁,回到从前,一起来看看 Servlet 是怎么和 Spring MVC 集成,怎么来初始化 Spring 容器的。
61 1
|
6月前
|
前端开发 JavaScript Java
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
722 1
|
消息中间件 前端开发 Java
GitHub标星30k!基于Spring MVC Mybatis分布式开发系统-zheng项目
zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。
|
消息中间件 前端开发 Java
GitHub标星30k!基于Spring MVC Mybatis分布式开发系统-zheng项目
前言 zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。
113 0
|
存储 前端开发 安全
SpringBoot项目中MVC使用--【JSB系列之010】
SpringBoot项目中MVC使用--【JSB系列之010】