.NET MVC在允许响应之前检查标头

时间:2018-09-20 10:37:00

标签: c# .net asp.net-mvc

我创建了一个Login系统,该系统在成功登录后为用户提供API密钥。 API密钥已附加访问级别。

我正在从前端发送每个Ajax请求的标头中的API密钥,但是它不再发送正确的响应。

这是我的控制者之一:

[AllowCrossSiteJson]
    public class WebOrdersController : Controller
    {
        protected IWebOrdersService _webOrdersService = new WebOrdersService();
        // GET: WebOrders
        public ActionResult Index()
        {
            return View();
        }
        [WebOrdersAPIFilter]
        public String GetTotals()
        {
             return _webOrdersService.GetAllTotals();
        }
    }

这是我的Filter类:

public class WebOrdersAPIFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            IAccountsService _accountsService = new AccountsService();
            filterContext.RequestContext.HttpContext.Response.AddHeader("Authority", "*");

            var rawUrl = HttpContext.Current.Request.RawUrl;
            var routeArray = rawUrl.Split('/');

            var route = routeArray[0].ToLower();

            if (String.IsNullOrEmpty(route))
            {
                route = routeArray[1].ToLower();
            }

            var headers = filterContext.HttpContext.Request.Headers;

            // Ensure that all of your properties are present in the current Request
            if (!String.IsNullOrEmpty(headers["Authority"]))
            {
                var apiKey = headers["Authority"];
                //GET API LEVEL
                int accessLevel = _accountsService.CheckAPIKey(apiKey);

                if(route == "weborders" && (accessLevel != 1 || accessLevel != 3 || accessLevel != 6))
                {
                    filterContext.Result = new RedirectResult("http://localhost/error/unauthorised");
                }

            }
            else
            {
                filterContext.Result = new RedirectResult("http://localhost/error/notloggedin");
            }

            base.OnActionExecuting(filterContext);
        }
    }

如果用户未登录,则不会在标头中发送API密钥,因此,如果不存在,则可以肯定地说他们已注销。如果他们已登录,则发送密钥。然后,我获取了他们键的访问级别并将其与路由进行比较。

我已调试它,发现route和accessLevel变量正常工作,但是即使它不返回并没有响应,并且如果IF()语句失败,它将返回/ error / unauthorized或/页面的html。错误/未登录,并且实际上没有重定向。

我如何实现我需要的功能,以确保请求数据的用户得到授权?

0 个答案:

没有答案