zoukankan      html  css  js  c++  java
  • 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 文件夹的文件了。

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

  • 相关阅读:
    Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
    DLL反编译,DLL反编译成C#代码, 有些不良同学会用到哦!
    各种分享按钮代码
    ASP.NET 计划任务(不使用外接程序,.net内部机制实现)
    工厂模式{C#描述}
    FI:Customize FBL3N Layout
    简单工厂 工厂模式 抽象工厂C#
    URL, URI 和 URN 之间的区别转
    resize属性,使textarea在ff(火狐)中禁止拉伸
    UML类图几种关系的总结转
  • 原文地址:https://www.cnblogs.com/linezero/p/5190037.html
Copyright © 2011-2022 走看看