除了使用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 基本使用相关推荐

  1. [Nancy On .Net Core Docker] 轻量级的web框架

    .net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到Nancy这个框架,在简单的使用之后,发现竟然是如此的简 ...

  2. Nancy in .Net Core学习笔记 - 初识Nancy

    原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...

  3. Nancy之结合TinyFox调试备忘

    原文:Nancy之结合TinyFox调试备忘 最近把一个小项目的数据库换成MongoDB,同时用了MongoRepository 这个开源组件来对数据进行操作. 通过NuGet安装之后,它会自动在we ...

  4. .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 ...

  5. Nancy之结合tinyfox给我们的应用提供简单的数据服务

    说到提供数据服务给我们的一些应用,估计用的最多的也就是json和xml这两种数据格式 实现的方法也是多种多样,web api,mvc的jsonresult和contentresult...等等 本文是 ...

  6. Nancy总结(三)Nancy资料介绍

    Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,可以基于 .NET 和 Mono 平台构建轻量级基于 HTTP 的Web 服务.它更多的是借鉴了Ruby的一些特性和Ruby的MVC ...

  7. Nancy 寄宿IIS

    一:简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方 ...

  8. Nancy简单实战之NancyMusicStore(二):打造首页

    原文:Nancy简单实战之NancyMusicStore(二):打造首页 前言 继上一篇搭建好项目之后,我们在这一篇中将把我们NancyMusicStore的首页打造出来. 布局 开始首页之前,我们要 ...

  9. Nancy之基于Self Hosting的补充小Demo

    原文:Nancy之基于Self Hosting的补充小Demo 前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with ...

  10. 关于 项目中Ioc基础模块 的搭建 (已适用于.net core / .net Framework / Nancy)

    Ioc (Inversion of Control, 控制反转)把创建对象的操作交给框架,亦被称为 DI(Dependency Injection, 依赖注入). 为什么叫做 "控制反转&q ...

最新文章

  1. nginx在windows里面配置
  2. windows container (docker) 容器资料笔记
  3. spring 整和activemq
  4. SpringBoot整合MyBatis-Plus分页查询
  5. boost::rational模块相关的测试程序
  6. 函数型F#语言很值得学习
  7. 安装Oracle WebCenter Content 11.1.1.8.0并将其与Oracle WebCenter Portal 11.1.1.8.0集成
  8. 地铁口多了一堆小卡片,事情并不简单?
  9. 删除文件夹提示“您需要权限来执行此操作”如何解决?
  10. 图灵奖得主、《龙书》作者最新力作:抽象、算法与编译器
  11. 浪潮发布PS Cloud 开源+云ERP会给中小企业带来哪些红利?
  12. 【转载】30个高质量但免费的自学网站
  13. 显示设备的接口分类:VGA,HDMI,DVI等等
  14. HTB靶场系列 linux靶机 Sense靶机
  15. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求
  16. C#应用程序界面开发基础——窗体控制(6)——菜单栏、工具栏和状态栏控件
  17. 计算机系统论文摘要,计算机系统结构论文摘要怎么写 计算机系统结构论文摘要范文参考...
  18. VSCode系列之IDEA快捷键
  19. Android-绝对音量和相对音量设置
  20. 计算机怎么取消用户锁定,电脑屏显已锁定、切换用户,按照这几个步骤操作,即可关闭它...

热门文章

  1. Autodesk 3ds Max 系统要求和电脑硬件建议
  2. Ubuntu 20.04 开启 root 远程登录
  3. 《有效提升你的职场说服力》
  4. 用python输出_python 输出输出用法
  5. 使用websocket-bench进行socket.io性能测试
  6. 百度智能云扩列:新生态下的“正和游戏”
  7. Java 8 新特性之Lambda
  8. ucml生成java_ucml选项卡
  9. 三星被“峰终定律”打败,苹果会是下一个?
  10. 网络分析仪在WiFi测试中的作用