使用Nancy.Host实现脱离iis的Web应用
开源任务管理平台TaskManagerV2.0代码里面已经使用了Nancy.Host实现自宿主的Web应用。学习Nancy之前最好了解一下ASP.NET MVC,因为Nancy和MVC实在是太相似了。
阅读目录
- Nancy介绍
- 创建第一个应用
- 使用技巧
- 总结
3.控制器返回JSON值控制
默认Nancy使用的是自己内置的JSON序列化库,个人倾向于使用JSON.NET库。所以通过设置替换成了JSON.NET。在CustomBootstrapper的ConfigureApplicationContainer容器里面替换了序列化库
////// 使用Newtonsoft.Json 替换Nancy默认的序列化方式 /// public class CustomJsonNetSerializer : JsonSerializer, ISerializer { public CustomJsonNetSerializer() { ContractResolver = new DefaultContractResolver(); DateFormatHandling = DateFormatHandling.IsoDateFormat; Formatting = Formatting.None; NullValueHandling = NullValueHandling.Ignore; } public bool CanSerialize(string contentType) { return contentType.Equals("application/json", StringComparison.OrdinalIgnoreCase); } public void Serialize(string contentType, TModel model, Stream outputStream) { using (var streamWriter = new StreamWriter(outputStream)) using (var jsonWriter = new JsonTextWriter(streamWriter)) { Serialize(jsonWriter, model); } } public IEnumerable<string> Extensions { get { yield return "json"; } } }
4.返回文件
Get["/Home/Download"] = r => { string path = AppDomain.CurrentDomain.BaseDirectory+@"\Content\UpFile\使用说明.docx"; if (!File.Exists(path)) { return Response.AsJson("文件不存在,可能已经被删除!"); } var msbyte = default(byte[]); using (var memstream = new MemoryStream()) { using (StreamReader sr = new StreamReader(path)) { sr.BaseStream.CopyTo(memstream); } msbyte = memstream.ToArray(); } return new Response() { Contents = stream => { stream.Write(msbyte, 0, msbyte.Length); }, ContentType = "application/msword", StatusCode = HttpStatusCode.OK, Headers = new Dictionary<string, string> { { "Content-Disposition", string.Format("attachment;filename={0}", HttpUtility.UrlPathEncode(Path.GetFileName(path))) }, {"Content-Length", msbyte.Length.ToString()} } }; };5.视图找不到解决方案 由于需要将视图文件和静态资源文件拷贝到bin目录下除了设置文件生成属性还可以通过项目生成后事件解决 批处理脚本如下
rd/s/q $(TargetDir)Content rd/s/q $(TargetDir)Views xcopy $(ProjectDir)\Content\*.* $(TargetDir)Content\ /s/d/r/y xcopy $(ProjectDir)\Views\*.* $(TargetDir)Views\ /s/d/r/y回到顶部https://files.cnblogs.com/files/yanweidie/NancyConsole.rar,更多关于Nancy的使用可以下载TaskManager源码进行研究http://code.taobao.org/svn/TaskManagerPub/Branch。下一篇介绍如何使用MEF实现通用的参数配置管理。
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。
因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是焰尾迭 。