ASP.NET MVC 中宿主WCF Rest 服务的解决方法

我这里就是通过routes.MapRoute(参数)中的参数进行处理的。MapRoute的重载如下:

RouteTable.Routes.MapRoute( string name, string url);
RouteTable.Routes.MapRoute( string name, string url, object defaults);
RouteTable.Routes.MapRoute( string name, string url, string[] namespaces);
RouteTable.Routes.MapRoute( string name, string url, object defaults, object constraints);
RouteTable.Routes.MapRoute( string name, string url, object defaults, string[] namespaces);
RouteTable.Routes.MapRoute( string name, string url, object defaults, object constraints, string[] namespaces);

 

name参数:规则名称可以随意取,但是不能重名,否则会报错。路由集合中已经存在为“default”的路由。路由名必须是唯一的。

Url参数:url获取数据的规则,这里不是正则表达式,将要识别的参数括起来就可以了,比如{controller}/{action}

注:最少只需要传递name,url参数,就可以建立一条Routing规则。比如实例中可改为: RouteTable.Routes.MapRoute("Default", "{controller}/{action}");,

defaults参数:url参数中的默认值,如果一个URL只有controller:localhost /home/,而我们只建立了一条url获取数据规则:{controller}/{action},这时就会为action参数设置defaults参数中规定的默认值,defaults是Object类型,可以传递一个匿名类型来初始化默认值。(action也就是index调用方法Userdetail())

new { controller = "Home", action = "Userdetail" });

constraints参数:用来限定每个参数的规则或Http请求的类型,constraints属性是一个RouteValueDictionary对象,也就是一个字典代表,字典的值可以有两种:a,用来定义正则表达式的字符串,正则表达式不区分大小写。B,用于实现IRouteConstraint接口且包含Match方法的对象。通过正则表达式可以规定参数格式,比如controller参数只能为4位数字:new {controller=@”\d{4}”}

        public static void RegisterRoutes(RouteCollection routes)  
        {
            //忽略对.axd文件的Route,也就是和WebForm一样直接去访问.axd文件
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{resource}.ashx/{*pathInfo}");
            
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional  }, // Parameter defaults
                new { controller = @"^\b(?!GetRegSourceData)\w*\b$"}
            );
            routes.Add(new ServiceRoute("GetRegSourceData", new WebServiceHostFactory(), typeof(GetRegSourceData)));
        }

查看以上代码 其中new { controller = @"^\b(?!GetRegSourceData)\w*\b$"}  过滤掉Controller为GetRegSourceData的URI.

然后就会去匹配WCF Rest Service的Route

routes.Add(new ServiceRoute("GetRegSourceData", new WebServiceHostFactory(), typeof(GetRegSourceData)));

 

转载于:https://www.cnblogs.com/aehyok/archive/2012/11/21/2781067.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
估计大家经常会碰到诸如:http://www.deepleo.com/12这样的链接,没有.php,.aspx,.jsp这样的后缀,这个是大势所趋。 其实这就是RESTREST翻译成文就是:“表述性状态转移”:Representational State Transfer,是网络服务接口的一种风格,并不是一个标准。 REST常用的四种HTTP命令,GET、DELETE、PUT和POST。 GET:是获取资源,DELETE: 是删除资源,PUT:修改资源,POST:不用说就是添加资源。 就web service而言,REST要比SOAP(SOAP是标准,不是风格)轻量得多,容易得多。最初开始接触web service的时候,所有的材料上来就是一大堆的名词,SOAP, WSDL,看得头都要大了,后来提出来的REST就容易理解得多,虽然目前SOAP在企业级的web service还有一席之地,但是在公共的Internet上,不是REST服务实在不好意思和人打招呼,我们经常可以看到评价某某服务RESTful的,但是从来没有听说某某服务是SOAPful的。 REST提出了一些设计概念和准则: 1.网络上的所有事物都被抽象为资源(resource); 2.每个资源对应一个唯一的资源标识(resource identifier); 3.通过通用的连接器接口(generic connector interface)对资源进行操作; 4.对资源的各种操作不会改变资源标识; 5.所有的操作都是无状态的(stateless)。 微软对REST的支持有点晚,自.NET3.5开始,WCF也可以提供RESTful接口。当然,REST不光限于web service,网页服务也可以RESTful,微软的ASP.NET MVC框架提供了直接的REST支持。 有关.net,MVC实现REST风格的方法请参见张善友老师的博客:http://www.cnblogs.com/shanyou/category/307401.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值