微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个非常轻量级的 Web API Demo

一个非常轻量级的 Web API Demo,代码量很少,实现了方法拦截器,token校验,异常拦截器,缓存

创建项目:如果选择Web API,项目中东西会比较多,这里选择Empty,把下面的Web API勾上,MVC不要勾

 

项目目录结构:

 

 Global.asax.cs代码这里配置方法拦截器和异常拦截

using System;
 System.Collections.Generic;
 System.Linq;
 System.Web;
 System.Web.Http;
 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( MyActionFilter());
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
}
View Code

MyActionFilter拦截代码

 Newtonsoft.Json;
 System.Net.Http;
 System.Text;
 System.Web.Http.Controllers;
 System.Web.Http.Filters;

 MyActionFilter : ActionFilterattribute
    {
        override  OnActionExecuting(HttpActionContext actionContext)
        {
            object value;
            if (actionContext.ActionArguments.TryGetValue("token",out value))
            {
                if (value.ToString() != 000")
                {
                    var errMsg = 
                    {
                        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);
        }
    }
}
View Code

MyExceptionFilter拦截代码

 MyExceptionFilter : ExceptionFilterattribute
    {
        //重写基类的异常处理方法
         OnException(HttpActionExecutedContext actionExecutedContext)
        {
            
            {
                errorMsg = 拦截到异常:" + actionExecutedContext.Exception.Message
            };

             JsonConvert.SerializeObject(errMsg);
            HttpResponseMessage result = ) };
            actionExecutedContext.Response = result;

            .OnException(actionExecutedContext);
        }
    }
}
View Code

一个简单的缓存工具类:

 System.Web.Caching;

 CacheHelper
    {
        #region 获取并缓存数据
        /// <summary>
        /// 获取并缓存数据
        </summary>
        <param name="cacheKey"></param>
        <param name="func">在此方法中初始化数据<param name="expirationSeconds">缓存过期时间</param>
        static T GetValue<T>(string cacheKey,Func<T> func,1)">int expirationSeconds = 0)
        {
            object cacheValue = httpruntime.cache.Get(cacheKey);
            if (cacheValue != null)
            {
                return (T)cacheValue;
            }
            else
            {
                T value = func();
                httpruntime.cache.Insert(cacheKey,value,,DateTime.Now.AddSeconds(expirationSeconds),Cache.NoSlidingExpiration);
                 value;
            }
        }
        #endregion

    }
}
View Code

控制器MyApiController.cs代码

 System.Net;
 WebApiDemo.Models;

 WebApiDemo.Controllers
{
    [RoutePrefix(api/MyApi)]
     MyApiController : ApiController
    {
        [HttpGet]
        [Route(GetAction)]
        public HttpResponseMessage GetAction(string token,1)">string param)
        {
            var obj = 
            {
                param = param
            };

             ToJson(obj);
        }

        [HttpPost]
        [Route(PostActionpublic HttpResponseMessage PostAction( param,[FromBody] MyData data)
        {
            Random rnd =  Random();
            int d = CacheHelper.GetValue<int>(MyCacheKey1
            {
                return rnd.Next(1,1)">10000);
            },20);

             data,cache = d.ToString()
            };

             ToJson(obj);
        }

        [HttpGet]
        [Route(ErrorActionpublic HttpResponseMessage ErrorAction(int a = Convert.ToInt32(abc ToJson(obj);
        }

        private HttpResponseMessage ToJson( obj)
        {
             JsonConvert.SerializeObject(obj);
            HttpResponseMessage result = ) };
             result;
        }
    }
}
View Code

发布:

部署在IIS,用Postman测试:

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐