一个非常轻量级的 Web API Demo
2021-03-14 06:41
标签:prefix ror open region ram 图片 项目 技术 cond 一个非常轻量级的 Web API Demo,代码量很少,实现了方法拦截器,token校验,异常拦截器,缓存 创建项目:如果选择Web API,项目中东西会比较多,这里选择Empty,把下面的Web API勾上,MVC不要勾
项目目录结构:
Global.asax.cs代码:这里配置方法拦截器和异常拦截器 MyActionFilter拦截器代码: MyExceptionFilter拦截器代码: 一个简单的缓存工具类: 控制器MyApiController.cs代码: 发布:
部署在IIS,用Postman测试: 一个非常轻量级的 Web API Demo 标签:prefix ror open region ram 图片 项目 技术 cond 原文地址:https://www.cnblogs.com/s0611163/p/12494720.htmlusing 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);
}
}
}
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);
}
}
}
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 获取并缓存数据
///
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.GetValueint>("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;
}
}
}