一、.net mvc中使用拦截器
引用using System.Web.Mvc;
继承 : ActionFilterAttribute,IActionFilter
public void OnAuthorization(AuthorizationContext filterContext)
{
}
获得Action中参数的值,提前进行预处理
private string GetPara(ActionExecutingContext filterContext, string ParaName)
{
if (filterContext.HttpContext.Request.Params.AllKeys.Contains(ParaName))
{
return filterContext.HttpContext.Request.Params[ParaName];
}
return string.Empty;
}
二、WebApi中使用拦截器
引用using System.Web.Http.Filters;
继承: ActionFilterAttribute
public override void OnActionExecuting(HttpActionContext actionContext)
{
//base.OnActionExecuting(actionContext);
}
已WebApi为例编写一个拦截器:
public class MyFilterTest : ActionFilterAttribute
{
string _input = string.Empty;
public MyFilterTest(string input)
{
_input = input;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
string paramValue = GetParaFromRequest(actionContext.Request, _input);
if (paramValue == "Data111")
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
actionContext.Response.Content = new ObjectContent(typeof(string), "Data111", new JsonMediaTypeFormatter());
return;
}
//base.OnActionExecuting(actionContext);
}
/// <summary>
/// 从请求中获取参数
/// </summary>
/// <param name="request"></param>
/// <param name="ParaKey"></param>
/// <returns></returns>
public static string GetParaFromRequest(HttpRequestMessage request, string ParaKey)
{
try
{
foreach (var item in request.GetQueryNameValuePairs())
{
if (item.Key == ParaKey)
{
return item.Value.ToString();
}
}
return string.Empty;
}
catch (Exception ex)
{
return string.Empty;
}
}
}
调用:
[HttpGet]
[MyFilterTest(input: "inputParam")]
public string Date2(string inputParam)
{
return "hahaha2222:【" + inputParam + "】" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
}
结果:调用Data2接口是,inputParam传入非"Data111"时,按接口内部返回值返回。当inputParam传入“Data111”时,在拦截器中直接返回了Data111,响应结束,不进入Data2接口中。