ASP.NET轻量级MVC框架Nancy的基本用法

 更新时间:2022年07月08日 14:14:28   作者:天方  
这篇文章介绍了ASP.NET轻量级MVC框架Nancy的基本用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

模块

Nancy的模块的概念类似于Asp.net中的Controller,一个典型的示例如下: 

public class Module : NancyModule
{
    public Module()
    {
        Get["/greet"] = x => "hello world";
    }
}

它定义了一个模块,并且定义了该模块下的一个Get操作。Nacy的模块需要继承自NancyModule ,服务器启动时默认会通过反射加载所有程序集下的NancyModule,包括各个dll中的程序集。

如果要实现动态加载别的程序集下的模块,初始化的时候使用Assembly.LoadFile之类的方法将其程序集加载即可。

Assembly.LoadFile(Path.GetFullPath(@".\WebModules.dll"));

操作

在模块中定义操作的基本用法如下:

Get["/greet"] = x => "hello world";

我们访问http://xxxx/greet的时候,就可以看到hello world字样。可以看出,每个模块中,对于Get,Post,Put及Delete等基本操作都定义了一个字典,类型为RouteBuilder,在RouteBuilder中定义了各种操作。

路由

默认情况下,RouteBuilder的key值定义的是绝对路径,例如

Get["/greet"] = x => "hello world";

定义的路由就是/greet,非常直接。

父路由

如果Module下的操作比较多,我们往往会将其设计为放在统一的父路由底下。如果每一个都定义一个父路由显得比较繁琐,此时,可以通过在Module中定义父亲路由的方式解决此问题。

public class ResourceModule : NancyModule
{
    public ResourceModule() : base("/products")
    {
        //此时的路径就是 /products/list 
        Get["/list"] = _ => "The list of products";
    }
}

参数传递

我们可以使用类似Asp.net类似的路由方式传递参数:

Get["/greet/{name}"] = para => $"Hello {para.name}";

参数是通过一个dynamic对象传递给该路由的操作行为的,每个参数都是该对象的一个属性值。可以通过 /greet/abc类似的路径查看访问结果。

但是,有时我们想要通过QueryString传递参数,如 /greet?name=abc, 此时可以通过Request.Query获取查询字符串。示例如下:

public class Module : NancyModule
{
    public Module()
    {
        Get["/greet"] = para =>
        {
            var name = Request.Query["name"];
            return $"Hello {name}";
        };
    }
}

返回值

前面的示例我们的操作都是返回一个字符串,但这种方式对于复杂对象来说是不够用的,此时我们就需要用到Nancy的标准返回值对象Response了。

public class Module : NancyModule
{
    public Module()
    {
        Get["/image"] = x =>
        {
            var data = File.ReadAllBytes(@"r:\123.jpg");
            return new Response
            {
                ContentType = "image/jpg",
                Contents = s => s.Write(data, 0, data.Length)
            };
        };
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • asp.net窗体操作总结

    asp.net窗体操作总结

    这些代码全部写在和页面分离的代码页中(codebehind),如果要嵌入到*.aspx页面,可能会出现问题.
    2008-11-11
  • MVC5 + EF6 + Bootstrap3 (11) 实现排序、搜索、分页

    MVC5 + EF6 + Bootstrap3 (11) 实现排序、搜索、分页

    本篇文章主要介绍了MVC5 + EF6 + Bootstrap3 (11) 实现排序、搜索、分页,小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-12-12
  • .Net遍历窗体上控件的方法

    .Net遍历窗体上控件的方法

    这篇文章主要介绍了.Net遍历窗体上控件的方法,通过foreach语句实现遍历窗体上的控件以及找出TextBox控件的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • datatable行转列示例分享

    datatable行转列示例分享

    这篇文章主要介绍了datatable行转列示例,指定需要转换的表和转换表表头对应旧表字段就可以转换了
    2014-01-01
  • System.Web.Routing入门及进阶

    System.Web.Routing入门及进阶

    System.Web.Routing已经作为一个程序集包含在.net3.5sp1中发布了。虽然我们并没有在3.5sp1中发现Asp.net Mvc的踪迹,但是亦以感觉到它离我们不远了
    2011-12-12
  • Asp.net调试的一些问题小结

    Asp.net调试的一些问题小结

    这篇文章主要介绍了asp.net调试方便的知识点,在CSDN找了一些相关的解决方法,不敢独享,供大家相互学习交流之用
    2013-11-11
  • HttpHandler HttpModule入门篇

    HttpHandler HttpModule入门篇

    ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览器中。
    2010-01-01
  • gridview 行选添加颜色和事件

    gridview 行选添加颜色和事件

    在gridview 列表中,需要添加如下效果,如果经过时变色,移开时还原成以前的颜色,行选中时通过加深色,从而知道选中了哪行
    2014-03-03
  • .NET core项目AsyncLocal在链路追踪中的应用

    .NET core项目AsyncLocal在链路追踪中的应用

    这篇文章主要为大家介绍了.NET core项目zhong AsyncLocal在链路追踪中的应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Asp.Net中NHiernate的Session的管理

    Asp.Net中NHiernate的Session的管理

    Asp.Net中NHiernate的Session的管理...
    2006-09-09

最新评论