新建一个空的Web项目

然后在Nuget库中安装下面两个包

  • Nancy
  • Nancy.Hosting.Aspnet

然后在根目录添加三个文件夹,分别是models,Module,Views

然后往Module文件夹里面添加ConstraintRoutingModule类

 public ConstraintRoutingModule()
{
Get("/",Lexan=>View["index"]); Get("/intConstraint/{value:int}",Lexan=>"这个值"+Lexan.value+ "是整数"); Get("/decimalConstraint/{value:decimal}",Lexan=>"这个值"+ Lexan.value+ "是十进制"); Get("/guidConstraint/{value:guid}",Lexan=>"这个值"+Lexan.value+ "是 guid"); Get("/boolConstraint/{value:bool}",Lexan=>"这个值"+Lexan.value+"是布尔值"); Get("/alphaConstraint/{value:alpha}", Lexan => "这个值" + Lexan.value + "是是信件"); Get("/datetimeConstraint/{value:datetime}", Lexan => "这个值" + Lexan.value + "是日期时间"); Get("/customDatetimeConstraint/{value:datetime(yyyy-MM-dd)}", Lexan => "这个值" + Lexan.value + "是一个日期时间, 格式为 'yyyy - mm - dd' "); Get("/minConstraint/{value:min(4)}", Lexan => "这个值" + Lexan.value + "是大于4的整数"); Get("/maxConstraint/{value:max(6)}", Lexan => "这个值" + Lexan.value + "是小于6的整数"); Get("/rangeConstraint/{value:range(10,20)}", Lexan => "这个值" + Lexan.value + "是介于10和20之间的整数"); Get("/minlengthConstraint/{value:minlength(4)}", Lexan => "这个值" + Lexan.value + "长度大于4的字符串"); Get("/maxlengthConstraint/{value:maxlength(10)}", Lexan => "这个值" + Lexan.value + "长度小于10的字符串"); Get("/lengthConstraint/{value:length(1,20)}", Lexan => "这个值" + Lexan.value + "是长度介于1和20之间的字符串"); Get("/versionConstraint/{value:version}", Lexan => "这个值" + Lexan.value + "是版本号"); Get("/emailConstraint/{value:email}", Lexan => "这个值" + Lexan.value + "是一个电子邮件地址");
}

然后往Models文件夹里面添加EmailRouteSegmentConstraint类

 public override string Name
{
get { return "email"; }
}
protected override bool TryMatch(string constraint, string segment, out string matchedValue)
{
//throw new NotImplementedException();
//使用 @jchannon 逻辑验证电子邮件地址
if (segment.Contains("@")&&segment.Contains("."))
{
matchedValue = segment;
return true;
}
matchedValue = null;
return false;
}

然后往Views文件夹里面添加index的html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
table {
border-collapse:collapse;
}
table,th,td{
border:1px solid black;
padding:2px 3px;
}
</style>
</head>
<body>
<h1>约束路由</h1>
<table>约束</table>
<table>
<thead>
<tr>
<th>
约束
</th>
<th>
描述
</th>
<th>
表达
</th>
<th>
样例
</th>
</tr>
</thead>
<tbody>
<tr>
<td>alpha</td>
<td>匹配大写或小写拉丁字母字符 (a-z、a-z)</td>
<td>{x:alpha}</td>
<td><a href="/alphaConstraint/foo">成功</a><a href="/alphaConstraint/1">失败</a></td>
</tr>
<tr>
<td>bool</td>
<td>匹配布尔值</td>
<td>{x:bool}</td>
<td><a href="/boolConstraint/true">成功</a><a href="/boolConstraint/foo">失败</a></td>
</tr>
<tr>
<td>datetime</td>
<td>匹配<strong>时间</strong>值</td>
<td>{x:datetime}</td>
<td><a href="/datetimeConstraint/1-1-2010">成功</a><a href="/datetimeConstraint/foo">失败</a></td>
</tr>
<tr>
<td>decimal</td>
<td>匹配十进制值</td>
<td>{x:decimal}</td>
<td><a href="/decimalConstraint/1.5555555555555555555555555555">成功</a><a href="/decimalConstraint/foo">失败</a></td>
</tr>
<tr>
<td>guid</td>
<td>匹配guid值</td>
<td>{x:guid}</td>
<td><a href="/guidConstraint/87e516f4-c759-430d-a552-18ad8e65483b">成功</a><a href="/guidConstraint/87e516f4-c759-430d-a552-18ad8e65483bd">失败</a></td>
</tr>
<tr>
<td>int</td>
<td>匹配整数值</td>
<td>{x:int}</td>
<td><a href="/intConstraint/1">成功</a><a href="/intConstraint/foo">失败</a></td>
</tr>
<tr>
<td>length</td>
<td>与指定长度或指定范围内的字符串匹配</td>
<td>{x:length()}<br />{x:length(,)}</td>
<td><a href="/lengthConstraint/foobar">成功</a><a href="lengthConstraint/foobarfoobarfoobar">失败</a></td>
</tr>
<tr>
<td>max</td>
<td>匹配具有最大值的整数</td>
<td>{x:max()}</td>
<td><a href="/maxConstraint/5">成功</a><a href="/maxConstraint/20">失败</a></td>
</tr>
<tr>
<td>maxlength</td>
<td>匹配最大长度的字符串</td>
<td>{x:maxlength()}</td>
<td><a href="/maxlengthConstraint/foobar">成功</a><a href="/maxlengthConstraint/foobarfoobar">失败</a></td>
</tr>
<tr>
<td>min</td>
<td>匹配具有最小值的整数</td>
<td>{x:min()}</td>
<td><a href="/minConstraint/5">成功</a><a href="/minConstraint/2">失败</a></td>
</tr>
<tr>
<td>minlength</td>
<td>匹配最小长度的字符串</td>
<td>{x:minlength()}</td>
<td><a href="/minlengthConstraint/foobar">成功</a><a href="/minlengthConstraint">失败</a></td>
</tr>
<tr>
<td>range</td>
<td>匹配值范围内的整数</td>
<td>{x:range(,)}</td>
<td><a href="/rangeConstraint/15">成功</a><a href="/rangeConstraint/25">失败</a></td>
</tr>
<tr>
<td>version</td>
<td>匹配版本号</td>
<td>{x:version}</td>
<td><a href="/versionConstraint/3.2.1">成功</a><a href="/versionConstraint/-4">失败</a></td>
</tr>
<tr>
<td>email</td>
<td>匹配电子邮件地址</td>
<td>{x:email}</td>
<td><a href="/emailConstraint/mail@domain.com">成功过</a><a href="emailConstraint/maild@asdsacom">失败</a></td>
</tr>
</tbody>
</table>
</body>
</html>

然后修改Web.config配置文件

    <httpHandlers>
<add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
</httpHandlers>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
</handlers>
</system.webServer>

然后按下F5运行

谢谢欣赏!明天同一时间更新!

NancyFx 2.0的开源框架的使用-ConstraintRouting的更多相关文章

  1. NancyFx 2.0的开源框架的使用-Basic

    这是NancyFx开源框架中的Basic认证,学习一下! 首先当然是新建一个空的Web,BasicDemo 继续在项目中添加Nuget包,记得安装的Nuget包是最新的预发行版 Nancy Nancy ...

  2. NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)

    NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹 ...

  3. NancyFx 2.0的开源框架的使用-ModelBinding(实现绑定)

    NancyFx框架中使用绑定模型 新建一个空的Web程序 然后安装Nuget库里面的包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Spark 并在We ...

  4. NancyFx 2.0的开源框架的使用-HosingOwin

    Nancy框架的Owin使用 先建一个空的Web项目 然后往Nuget库里面添加Nancy包 Nancy Nancy.Owin Nancy.ViewEnglines.Spark 然后添加Models, ...

  5. NancyFx 2.0的开源框架的使用-Authentication

    新建一个空的项目 新建好了空的项目以后,接着通过NuGet安装一下三个包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Razor 然后在项目中添加Mod ...

  6. NancyFx 2.0的开源框架的使用-Forms

    同样的像前面2篇博文一样,每个项目的开始基本都是建个空的Web项目 在NuGet库中安装以下几个NuGet包 Nancy Nancy.Authentication.Forms Nancy.Hostin ...

  7. NancyFx 2.0的开源框架的使用-Stateless

    同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...

  8. NancyFx 2.0的开源框架的使用-Stateless(二)

    继续上一篇Stateless的博文,在上一篇的博文的基础上稍微加点东西 接下来右键解决方案添加新项目,一样建一个空的Web项目 然后在StatelessDemoWeb项目里面添加Views文件夹,Sc ...

  9. NancyFx 2.0的开源框架的使用-AspnetBootstrapping

    新建一个空的Web项目AspnetBootstrappingDemo 然后添加NuGet组件 Nancy Nancy.Hosting.Aspnet Nancy.ViewEngines.Razor 继续 ...

随机推荐

  1. (实战)多边形,梯形盒阴影css实现技巧

    一般情况下,我们给块状元素(四边形)添加阴影样式,直接用css box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);就可以了,但是总有一些需求是那么的特别,例如下图: ...

  2. Codeforces 95C Volleyball(最短路)

    题目链接:http://codeforces.com/problemset/problem/95/C C. Volleyball time limit per test 2 seconds memor ...

  3. animate(动画)框架 和 swiper (轮播)框架 的使用

    swiper.js 框架 网址:https://www.swiper.com.cn/ 是一个专门做轮播,切换特效的轮播 使用方法: 然后进入案例,通过案例来进行各种功能的实现, 这一步是教我们怎么做, ...

  4. Git 创建版本库并实现本地上传数据到GitHub库

    版本库又叫做仓库,其实也是一个目录,这个目录里的所有文件都是被Git管理着,对每个文件的修改,删除,Git都会进行记录,方便我们对其进行跟踪. 因为本地是window环境,我们先从官网下载好windo ...

  5. C# 调Win32 API SendMessage简单用法及wMsg常量

    函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一.     函数原型:LRESU ...

  6. 在Linux环境中运行python 项目

    1首先创建一个虚拟环境或者在一个已有的虚拟环境中创建一个django项目 1.1 创建一个虚拟环境: mkvirtualenv my_django115 这会在 ~/Envs 中创建 my_djang ...

  7. linux基本目录

    / 根目录: dev : 存放抽象硬件 ib : 存放系统库文件 sbin : 存放特权级二进制文件 var : 存放经常变化的文件 home : 普通用户目录 etc : 存放配置文件目录 /etc ...

  8. 【转】python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>

    [转]python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义 ...

  9. DRF中的视图集的使用

    1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把  GenericAPIView ...

  10. Sqlserver 中间表的操作

    去除列名重复 select rtrim(ltrim(a.Bank)) as Country, count(*) as Total from T_BASE_OWNER a left join T_BAS ...