Nancy 基本使用
除了使用webapi外, Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,具体详细,可以百度。
注意事项
1.所有 api 写在Models下面
2.引入 Nancy 库 我的是.net 4.5的 所以选的版本是 1.4.1的
引入成功后在 web.config会自动新增配置节点
基本配置搞完后在具体实现
1.新建基类api BaseApi
using Nancy;
using Nancy.ModelBinding;
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Web;
using 小鱼_SysEntity;
using 小鱼_api.Utils;namespace 小鱼_api.Models
{/// <summary>/// 基类api/// </summary>public class BaseApi : NancyModule{#region 构造函数public BaseApi(): base(){Before += BeforeRequest; //前置拦截器OnError += OnErroe; //api 报错执行After += AfterResponse;//后置拦截器 可以在这里修改或替换当前的Response}public BaseApi(string baseUrl): base(baseUrl){Before += BeforeRequest;OnError += OnErroe;After += AfterResponse;}#endregion 构造函数#region Nancy 前置,后置,错误 拦截/// <summary>/// 前置拦截器/// </summary>/// <param name="ctx"></param>/// <returns></returns>private Response BeforeRequest(NancyContext ctx){ //登录有效验证return null;}/// <summary>/// 请求后置拦截器 || 压缩数据/// </summary>/// <param name="ctx"></param>private void AfterResponse(NancyContext ctx){#region 压缩数据HttpResponse response = HttpContext.Current.Response;string AcceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"];if (!string.IsNullOrWhiteSpace(AcceptEncoding)){var headers = response.Headers.AllKeys;/***在调用工具类的时候 比如下载文件,实际已经在工具类响应了,如果在次添加 压缩请求头信息会提示 重复添加头信息错误提示*在postmain调试下可以看到效果**/if (!headers.Contains("Content-Type")){if (AcceptEncoding.Contains("deflate")){response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);response.AppendHeader("Content-Encoding", "deflate");}else{response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);response.AppendHeader("Content-Encoding", "gzip");}}}#endregion 压缩数据}/// <summary>/// 监听接口异常/// </summary>/// <param name="ctx">连接上下信息</param>/// <param name="ex">异常信息</param>/// <returns></returns>private Response OnErroe(NancyContext ctx, Exception ex){return Response.AsText("");}#endregion Nancy 前置,后置,错误 拦截//还以 统一 请求参数 及响应参数。}
}
2.新建业务api 继承 BaseApi
using Nancy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using 小鱼_SysEntity;
using 小鱼_api.Service;namespace 小鱼_api.Models
{/// <summary>/// 用户api/// </summary>public class UserApi : BaseApi{public UserApi() : base("/user"){Post["login"] = Login;//用户登录}private readonly UserService userService = new UserService();public Response Login(dynamic _){var loginModel = this.GetReqData<LoginModel>();var userInfo = userService.CheckLogin(loginModel.username, loginModel.password);if (userInfo == null){return Fail("用户名或密码错误");}return Success(userInfo);}public class LoginModel{/// <summary>/// 账号/// </summary>public string username { get; set; }/// <summary>/// 密码/// </summary>public string password { get; set; }}}
}
讲解,以上代码 只是提供思路
1.在BaseApi, 定义统一api 的 响应参数模板 例如返回数据格式{code:200,info:"响应成功",data:响应数据 };
2.在BaseApi, 定义统一api 的 请求参数模板 例如 {token:XXXX,data:{obj}};(每次请求携带服务器密钥,可以验证请求有效性)
3.在BaseApi里 Nancy的 BeforeRequest 方法 前置拦截,在调用api时候 会先进入这个方法(那么就可以搞事情了,在这里验证登录请求有效性,及权限,访问api次数等等 一些,返回值 没有通过验证的话 直接 return null)
4.在BaseApi里 Nancy的 AfterResponse方法 后置拦截 可以在这里修改或替换当前的Response,我的应用暂时是数据压缩。
5.在BaseApi里 Nancy的 OnErroe方法 记录日志,调用api错误时候会进入此方法,记录错误信息
6.服务api继承自BaseApi ,然后实现自己业务逻辑就好了。
Nancy 基本使用相关推荐
- [Nancy On .Net Core Docker] 轻量级的web框架
.net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到Nancy这个框架,在简单的使用之后,发现竟然是如此的简 ...
- Nancy in .Net Core学习笔记 - 初识Nancy
原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...
- Nancy之结合TinyFox调试备忘
原文:Nancy之结合TinyFox调试备忘 最近把一个小项目的数据库换成MongoDB,同时用了MongoRepository 这个开源组件来对数据进行操作. 通过NuGet安装之后,它会自动在we ...
- .net web部署(IIS Express Nancy Self-Hosting)
http://d.hatena.ne.jp/fkmt5/20140330/1396195246 [1]Nancy Web配置注意事项 添加url:netsh http add urlacl url=h ...
- Nancy之结合tinyfox给我们的应用提供简单的数据服务
说到提供数据服务给我们的一些应用,估计用的最多的也就是json和xml这两种数据格式 实现的方法也是多种多样,web api,mvc的jsonresult和contentresult...等等 本文是 ...
- Nancy总结(三)Nancy资料介绍
Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,可以基于 .NET 和 Mono 平台构建轻量级基于 HTTP 的Web 服务.它更多的是借鉴了Ruby的一些特性和Ruby的MVC ...
- Nancy 寄宿IIS
一:简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方 ...
- Nancy简单实战之NancyMusicStore(二):打造首页
原文:Nancy简单实战之NancyMusicStore(二):打造首页 前言 继上一篇搭建好项目之后,我们在这一篇中将把我们NancyMusicStore的首页打造出来. 布局 开始首页之前,我们要 ...
- Nancy之基于Self Hosting的补充小Demo
原文:Nancy之基于Self Hosting的补充小Demo 前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with ...
- 关于 项目中Ioc基础模块 的搭建 (已适用于.net core / .net Framework / Nancy)
Ioc (Inversion of Control, 控制反转)把创建对象的操作交给框架,亦被称为 DI(Dependency Injection, 依赖注入). 为什么叫做 "控制反转&q ...
最新文章
- nginx在windows里面配置
- windows container (docker) 容器资料笔记
- spring 整和activemq
- SpringBoot整合MyBatis-Plus分页查询
- boost::rational模块相关的测试程序
- 函数型F#语言很值得学习
- 安装Oracle WebCenter Content 11.1.1.8.0并将其与Oracle WebCenter Portal 11.1.1.8.0集成
- 地铁口多了一堆小卡片,事情并不简单?
- 删除文件夹提示“您需要权限来执行此操作”如何解决?
- 图灵奖得主、《龙书》作者最新力作:抽象、算法与编译器
- 浪潮发布PS Cloud 开源+云ERP会给中小企业带来哪些红利?
- 【转载】30个高质量但免费的自学网站
- 显示设备的接口分类:VGA,HDMI,DVI等等
- HTB靶场系列 linux靶机 Sense靶机
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求
- C#应用程序界面开发基础——窗体控制(6)——菜单栏、工具栏和状态栏控件
- 计算机系统论文摘要,计算机系统结构论文摘要怎么写 计算机系统结构论文摘要范文参考...
- VSCode系列之IDEA快捷键
- Android-绝对音量和相对音量设置
- 计算机怎么取消用户锁定,电脑屏显已锁定、切换用户,按照这几个步骤操作,即可关闭它...