首页新闻找找看学习计划

mvc Initialize访问阻止问题。

0
悬赏园豆:10 [已解决问题] 解决于 2016-11-24 17:37

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;
        }

 

s_p的主页 s_p | 菜鸟二级 | 园豆:269
提问于:2016-10-19 08:35
< >
分享
最佳答案
0

 用过滤器吧,在你的BaseController中重写OnActionExecuting,你要实现的功能通常都是用过滤器

收获园豆:10
balahoho | 老鸟四级 |园豆:2123 | 2016-10-19 09:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册