标签:prefix ror open region ram 图片 项目 技术 cond
一个非常轻量级的 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测试:
标签:prefix ror open region ram 图片 项目 技术 cond
原文地址:https://www.cnblogs.com/s0611163/p/12494720.html