code:
public class BaseController : ApiController { protected string Token { get; set; } protected dynamic UserList = null; /// <summary> 在执行操作方法之前由 ASP.NET MVC 框架调用。 /// </summary> protected override void Initialize(HttpControllerContext controllerContext) { var headers = controllerContext.Request.Headers; if (headers.Contains("Authorization")) { Token = headers.GetValues("Authorization").ToList()[0]; var userId = RedisBase.GetString(ConfigRead.GetInstance.RedisKeyValue()+Token); if (userId==null) { HttpHelper.ResponseMessagetoJsonExtnd(MessageList.ApiTokenMsg); return; } UserList = DynamicJson.Parse(userId); if (UserList==null) { HttpHelper.ResponseMessagetoJsonExtnd(MessageList.ApiTokenMsg); return; } } base.Initialize(controllerContext); }}
webapi控制器基类 会判断客户端请求带的都头信息Authorization 取redis信息。 如果 不存在或者失效 阻止运行。
问题是:判断没有问题。但是值为空的时候 api控制器继承后 控制器代码还继续执行 没有阻止。 我又不想在每个控制器方法前 if 判断一下。
HttpHelper.ResponseMessagetoJsonExtnd代码:
public static HttpResponseMessage ResponseMessagetoJsonExtnd(string str) { var response = new HttpResponseMessage(HttpStatusCode.OK); HttpContent content = response.Content; response.Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "text/html"); return response; }
用过滤器吧,在你的BaseController中重写OnActionExecuting,你要实现的功能通常都是用过滤器