• 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 文件夹的文件了。

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

  • 相关阅读:
    开源项目:MMTweenAnimation
    URI跳转方式地图导航的代码实践
    处理i18n国际电话区号的代码实践
    图片变形的抗锯齿处理方法
    CocoaPods版本升级
    JSPatch 部署安全策略
    JSPatch实现原理详解<二>
    JSPatch实现原理详解
    JSPatch – 动态更新iOS APP
    iOS富文本组件的实现—DTCoreText源码解析 渲染篇
  • 原文地址:https://www.cnblogs.com/linezero/p/5190037.html
Copyright © 2020-2023  润新知