在源码的Nancy.Demo.CustomModule项目示例中

查看UglifiedNancyModule.cs文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private IEnumerable<Route> GetRoutes()
      {
          // Run through all the methods on the class looking
          // for our attribute. If we were to do this for a real
          // app we'd be checking parameters and return types etc
          // but for simplicity we won't bother here.
          var routes = new List<Route>();
          var type = this.GetType();
 
          var methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(f => (!f.Name.Contains("_")) && (f.Name != "ToString") && (f.Name != "Equals") && (f.Name != "GetType") && (f.Name != "GetHashCode"));
 
          foreach (var method in methods)
          {
              var attribute = method.GetCustomAttributes(typeof(NancyRouteAttribute), false).FirstOrDefault() as NancyRouteAttribute;
 
 
              if (attribute == null)
              {
                  continue;
              }
 
              var routeDelegate = WrapFunc((Func<dynamic, dynamic>)Delegate.CreateDelegate(typeof(Func<dynamic, dynamic>), this, method.Name));
 
              var filter = this.GetFilter(method.Name);
 
              var fullPath = String.Concat(this.ModulePath, attribute.Path);
 
              routes.Add(new Route(attribute.Method.ToUpper(), fullPath, filter, routeDelegate));
          }
 
          return routes.AsReadOnly();
      }

p:上面的代码中我去除了带有_的方法和自带的tostring gethash等冗余方法。

上面是获取路由的方法,可以看出获取的流程

首先  获取当前类(UglifiedNancyModule)的所有方法

其次  循环每一个方法

然后 查看方法上是否有自定义的属性,示例中为NancyRouteAttribute

最后 根据方法名和属性名进行特殊处理

1
var filter = this.GetFilter(method.Name);

例子中 调用 http://localhost:56673/filtered 地址时,先查找是否有 FilteredFilter方法(通过  routeMethodName + "Filter"  获取    )

如果有该方法,则执行该方法,此处为FilteredFilter,

如果FilteredFilter返回true  则继续执行filtered这个路由的方法,

如果FilteredFilter返回false 则返回一个404错误。 也就是实现了所谓的过滤的功能。

当然如果真是用的时候,用这种方式来过滤,是很蛋疼的。此为项目的演示代码。

nancyfx 自定义路由module的更多相关文章

  1. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  2. Mvc自定义路由让支持.html的格式

    前言 在大多时候,我们都需要自定义路由,当我们设置为/list/1.html的时候,有的时候会出现以下异常. routes.MapRoute( "category", // 路由名 ...

  3. YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由

    上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引 ...

  4. Web API配置自定义路由

    默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...

  5. WPF:自定义路由事件的实现

    路由事件通过EventManager,RegisterRoutedEvent方法注册,通过AddHandler和RemoveHandler来关联和解除关联的事件处理函数:通过RaiseEvent方法来 ...

  6. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  7. ruby -- 进阶学习(十)自定义路由中:new, :collection和:member的区别

    学习链接:http://rubyer.me/blog/583/ RESTful风格的路由动词默认有7个(分别为:index, show, create, new, edit, update, dest ...

  8. CI 框架中的自定义路由规则

    在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...

  9. Asp.net MVC 自定义路由在IIS7以上,提示Page Not Found 解决方法

    受限确保自定义路由在开发服务器上Ok! 然后在web.config的<webserver>节点下增加如下配置就好了.   1: <system.webServer> 2: &l ...

随机推荐

  1. mysql用一个表更新另一个表的方法

    Solution 1:  修改1列(navicate可行) update student s, city c set s.city_name = c.name where s.city_code = ...

  2. 使用JS获取当前地理位置方法汇总(如用谷歌接口,会出再以上报错,必须申请密钥并设置接受服务器IP!!!)

    RefererNotAllowedMapError 错误 加载 Google Maps JavaScript API 的当前 URL 尚未添加到允许的引用站点列表中.请在 Google API Con ...

  3. CFGym 101161I 题解

    一.题目链接 http://codeforces.com/gym/101161/problem/I 二.题意 给定一棵树,一个初始的省会城市,若干个询问,0表示修改省会城市,1表示查询去省会必须经过指 ...

  4. HttpContext.Current并非无处不在

    阅读目录 开始 无处不在的HttpContext HttpContext.Current到底保存在哪里? HttpContext并非无处不在! 如何获取文件绝对路径? 异步调用中如何访问HttpCon ...

  5. jquery对象和DOM对象转换

    DOM对象转换成jquery对象 var box = document.getElementById('box'); console.log($(box)); jquery对象转化成DOM对象 第一种 ...

  6. dd命令的conv=fsync,oflag=sync/dsync

    conv的参数有 1.sync Pad every input block to size of 'ibs' with trailing zero bytes. When used with 'blo ...

  7. Django ORM-02

    6.ForeignKey 相关操作 1.正向查找 正向查找:那么什么是正向查找,我们知道对于一对多或者多对一的情况,我们一般将ForeignKey设置在多的一边,比如我们的书籍与出版社一般是多对一的, ...

  8. 372. Super Pow.txt

    ▶ 指数取模运算 ab % m ▶ 参考维基 https://en.wikipedia.org/wiki/Modular_exponentiation,给了几种计算方法:暴力计算法,保存中间结果法(分 ...

  9. win10 修改hosts

    win10 修改hosts,是权限的问题, C:\Windows\System32\drivers\etc\hosts 添加权限即可. http://jingyan.baidu.com/article ...

  10. Android 包信息工具类

    /** AndroidInfoUtils:安卓游戏包信息工具类**/ 1 public class AndroidInfoUtils { @SuppressWarnings("uncheck ...