Nancy 学习-进阶部分 继续跨平台

前面两篇,讲解Nancy的基础,及Nancy自宿主和视图引擎。

现在来学习一些进阶部分。

Bootstrapper

Bootstrapper 就相当于 asp.net 的Global.asax 。

我们自定义Bootstrapper 需要继承  DefaultNancyBootstrapper

public class CustomBootstrapper : DefaultNancyBootstrapper
{
    protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
    {
         // 你的自定义启动代码
    }
}

我们可以在 ApplicationStartup 中初始化一些参数及方法,也可以在获取全局异常。

下面我们来看看如何获取全局异常。

    public class CustomBootstrapper:DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
        {
            pipelines.OnError += Error;
        }

        private dynamic Error(NancyContext context, Exception ex)
        {
            //可以使用log4net记录异常 ex 这里直接返回异常信息
            return ex.Message;
        }
    }

The root path

root path GetRootPath 可以获取应用根目录。

我们也可以更改应该根目录。

更改根目录需要实现接口 :IRootPathProvider

首先实现 IRootPathProvider 接口

public class CustomRootPathProvider : IRootPathProvider
{
    public string GetRootPath()
    {     //程序根目录 需要绝对路径
        return "C:\\inetpub\\wwwroot";
    }
}

然后我们在前面的 CustomBootstrapper   override  RootPathProvider

public class CustomBootstrapper : DefaultNancyBootstrapper
{
    protected override IRootPathProvider RootPathProvider
    {
        get { return new CustomRootPathProvider(); }
    }
}

这样我们就实现了更改应用根目录。

我们来使用 root path  ,以上传文件为例。

        public HomeModule(IRootPathProvider path)
        {

            Post["/file"] = r =>
            {
                var uploadDirectory = Path.Combine(path.GetRootPath(), "uploads");

                if (!Directory.Exists(uploadDirectory))
                {
                    Directory.CreateDirectory(uploadDirectory);
                }

                foreach (var file in Request.Files)
                {
                    var filename = Path.Combine(uploadDirectory, file.Name);
                    using (FileStream fileStream = new FileStream(filename, FileMode.Create))
                    {
                        file.Value.CopyTo(fileStream);
                    }
                }
                return HttpStatusCode.OK;
            };
        }

将文件上传到根目录下的 uploads 文件夹。

Managing static content

静态文件管理

现在我们要访问刚刚上传的文件,如图片这些改怎么办呢。

下面我们来实现这个,Nancy的静态资源访问。

我们在前面的 CustomBootstrapper  重写 ConfigureConventions  方法。

        protected override void ConfigureConventions(NancyConventions conventions)
        {
            base.ConfigureConventions(conventions);
            //添加文件夹 file 请求地址 uploads 是文件夹 也就是物理路径相对的
            conventions.StaticContentsConventions.AddDirectory("file","uploads");
            //添加文件
            conventions.StaticContentsConventions.AddFile("index.html", "1.html");
        }

这样我们就可以访问uploads 文件夹的文件了。

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

时间: 2024-10-23 03:30:00

Nancy 学习-进阶部分 继续跨平台的相关文章

Nancy 学习-身份认证(Basic Authentication) 继续跨平台

开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentication ,基本认证. 在HTTP中,基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式. 说明:本篇示例是基于 Nancy 1.4.3.Nancy 2.0预览版 已经发布,版本改动较大,故特此说明. 准备 安装 Nancy.Authenti

Tomcat 学习进阶历程之Tomcat架构与核心类分析

前面的http及socket两部分内容,主要是为了后面看Tomcat源码而学习的一些网络基础.从这章开始,就开始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源码之前,准备先看一下Tomcat的架构与一些核心类的简单分析,并简单介绍一下Tomcat是如何处理一次Http请求的.这部分内容有相当一部分来源于网络,在此,感谢原作者的贡献. Tomcat的总体架构 Tomcat的架构关系可以从Tomcat的配置文件server.xml中看到端倪. 从上图中可以看出Tomcat 的心脏

Tomcat 学习进阶历程之关闭钩子

使用JAVA的过程中,经常遇到程序启动时初始化一下资源,或生成一下临时文件,程序退出时要清除这些临时文件,或者程序退出时执行一下必要的其他操作.如果程序是通过我们提供的关闭/退出按钮正常退出的,一切还都好处理,但是如果用户直接关闭虚拟机运行的窗口,那一切就会变的比较复杂. 好在java提供了一种优雅的方式去解决这种问题.使得关闭的善后处理的代码能执行.java的关闭钩子能确保总是执行,无论用户如何终止应用程序.除非用户kill,这个是个死穴. 对java而言,虚拟机会对以下几种操作进行关闭: (

Tomcat 学习进阶历程之Tomcat启动过程分析

本节通过跟踪Tomcat的源码来分析Tomcat是如何启动及装配各个组件的.最好下载Tomcat的源码导入到Eclipse,这样方便跟踪.方法可参考: http://www.cnblogs.com/huangfox/archive/2011/10/20/2218970.html 在Tomcat的启动脚本篇,我们分析过,当执行Start.bat文件时,最后实际调用的是BootStrap.java类.如下图: 如上图,实际调用BootStrap,并传递一个名为'start'参数. 在BootStra

Android学习进阶路线Android源码分享)

毕业8月有余,同时伴随着从事的Android经验的提升.仔细思量过去的工作内容,掐指算来也是少得可怜---主要维护FM收 音机模块,间或看看Lancher模块的代码.尽管这样,总的来说,在这八个月事件的学习里,我自我感觉收获还是很大的---自学了很多 Android相关方面的知识.虽然里真正的大牛还有很远的一段路程要走,自己也会坚持学习.坚持走下去. 再次,把自己学习过程中总结的一些经验总结出来,帮助那些刚刚步入Android的网友以及有了取得了一些经验但不知如何 继续前行的朋友,希望你们能够早

Android学习进阶路线导航线路(Android源码分享)

前言:公司最近来了很多应届实习生,看着他们充满信心但略带稚气的脸庞上,想到了去年的自己,那是的我是不是也和 现在的他们一样呢?现在的我又改变了什么?公司的给这些实习生指定的相关培训制度还是比较完善的(我可是个菜鸟).但我反 过来想,假如是我,我会制定一个怎样的短期或者长远的计划?总结了自己学到的知识,形成了一个学习线路,希望能给予同 道中人一点儿小小帮助. 毕业8月有余,同时伴随着从事Android开发的经验的提升.仔细思量过去的工作内容,掐指算来也是少得可怜---主要维护FM收 音机模块,间或

Linux学习进阶路线图

为什么要学习Linux? 为什么学Linux,每个人都有自己的理由: Linux是免费的不用花一分钱,能够节约大笔的成本: Linux是开源的,你可以根据自已的需要修改源代码: Linux是开放的,有广泛的社区,关于Linux的讨论要远远高于windows操作系统: 学习Linux可以更好的掌握计算机技术: Linux是未来发展的趋势,服务器,手机,掌上电脑,平板机很多都采用Linux操作系统: Linux有非常多的发行版本,你可以根据需要做出不同的选择: Linux让你多了一个选择,而且Lin

mybatis学习进阶(5)

二.mybatis进阶     高级映射 查询缓存 和spring整合 1.入门阶段复习 mybatis:一个持久层框架 低成本,高回报.让程序员把精力放在sql语句上,对sql语句优化非常方便,适用于需求变化较多的项目,egg:互联网项目 mybatis框架执行过程: l  配置mybatis的配置文件,SqlMapConfig.xml l  通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式进行管

Linux 学习进阶,系统安装和IP配置

新手第一次接触Linu,x借助博客记录自己学习Linux的过程,即是分享相关知识,也是为了通过这样一个平台监督自己的学习进度.本人大学所学专业为国际贸易,从事了一年的外贸工作,后决定转行IT行业,从而选定Linux运维这个工作.上周报名了一个学习班,边学习边记录,以此作为新的起点. 一.Linux安装 选用的是VMware虚拟机,序列码是从百度搜来,可用,之后下载了Centos6.5 版本,按照操作提示安装,较为简单. 步骤: 开启虚拟机->安装介质(OK skip跳过)->next->