-
一个非常轻量级的 Web API Demo
一个非常轻量级的 Web API Demo,代码量很少,实现了方法拦截器,token校验,异常拦截器,缓存
创建项目:如果选择Web API,项目中东西会比较多,这里选择Empty,把下面的Web API勾上,MVC不要勾
项目目录结构:
Global.asax.cs代码:这里配置方法拦截器和异常拦截器

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Routing; namespace WebApiDemo { public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new MyExceptionFilter()); GlobalConfiguration.Configuration.Filters.Add(new MyActionFilter()); GlobalConfiguration.Configure(WebApiConfig.Register); } } }
MyActionFilter拦截器代码:

using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Web; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace WebApiDemo { public class MyActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { object value; if (actionContext.ActionArguments.TryGetValue("token", out value)) { if (value.ToString() != "000") { var errMsg = new { errorMsg = "token不匹配" }; string str = JsonConvert.SerializeObject(errMsg); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.UTF8, "application/json") }; actionContext.Response = result; } } base.OnActionExecuting(actionContext); } } }
MyExceptionFilter拦截器代码:

using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Web; using System.Web.Http.Filters; namespace WebApiDemo { public class MyExceptionFilter : ExceptionFilterAttribute { //重写基类的异常处理方法 public override void OnException(HttpActionExecutedContext actionExecutedContext) { var errMsg = new { errorMsg = "拦截到异常:" + actionExecutedContext.Exception.Message }; string str = JsonConvert.SerializeObject(errMsg); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.UTF8, "application/json") }; actionExecutedContext.Response = result; base.OnException(actionExecutedContext); } } }
一个简单的缓存工具类:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Caching; namespace WebApiDemo { public class CacheHelper { #region 获取并缓存数据 /// <summary> /// 获取并缓存数据 /// </summary> /// <param name="cacheKey">键</param> /// <param name="func">在此方法中初始化数据</param> /// <param name="expirationSeconds">缓存过期时间</param> public static T GetValue<T>(string cacheKey, Func<T> func, int expirationSeconds = 0) { object cacheValue = HttpRuntime.Cache.Get(cacheKey); if (cacheValue != null) { return (T)cacheValue; } else { T value = func(); HttpRuntime.Cache.Insert(cacheKey, value, null, DateTime.Now.AddSeconds(expirationSeconds), Cache.NoSlidingExpiration); return value; } } #endregion } }
控制器MyApiController.cs代码:

using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Web.Http; using WebApiDemo.Models; namespace WebApiDemo.Controllers { [RoutePrefix("api/MyApi")] public class MyApiController : ApiController { [HttpGet] [Route("GetAction")] public HttpResponseMessage GetAction(string token, string param) { var obj = new { param = param }; return ToJson(obj); } [HttpPost] [Route("PostAction")] public HttpResponseMessage PostAction(string token, string param, [FromBody] MyData data) { Random rnd = new Random(); int d = CacheHelper.GetValue<int>("MyCacheKey1", () => { return rnd.Next(1, 10000); }, 20); var obj = new { param = param, data = data, cache = d.ToString() }; return ToJson(obj); } [HttpGet] [Route("ErrorAction")] public HttpResponseMessage ErrorAction(string token, string param) { var obj = new { param = param }; int a = Convert.ToInt32("abc"); return ToJson(obj); } private HttpResponseMessage ToJson(object obj) { string str = JsonConvert.SerializeObject(obj); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.UTF8, "application/json") }; return result; } } }
发布:
部署在IIS,用Postman测试:
出处:https://www.cnblogs.com/s0611163/p/12494720.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数