1

标题中有点难以解释。基本上我有一个具有共享视图的 MVC 应用程序。共享视图是标题,然后我根据用户选择的选项卡加载视图。

我的问题如下:

封闭的视图有一个网格,用户可以单击该网格并从中获取详细信息。详细信息页面是部分视图。我正在尝试应用 MVC 安全过滤器并在会话到期时重定向到登录页面。我有一个覆盖 HandleUnauthorizedRequest 的自定义类。

using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using PortalAPI.SPModels;
using SICommon.Enums;
using SICommon.LoggingOperations;

namespace Portal.Security {
    public class AuthorizedUser : AuthorizeAttribute {
        public bool IsAuthorized { get; set; }

        protected override bool AuthorizeCore(HttpContextBase httpContext) {
            var sessionHash = Convert.FromBase64String(httpContext.Request.Cookies.Get("hash")?.Value);

            if (sessionHash == null)
                return this.IsAuthorized = false;

            if (TransmitToSP.TransmitAPIRequest<APIRequest, SICommon.CommonModels.APIResponse>(
                new APIRequest() {
                    UserRole = (UserRole)((CustomPrincipal)httpContext.User)?.CustomIdentity?.UserRoles[0],
                    SessionHash = sessionHash,
                    RequestStartTime = DateTime.UtcNow,
                    CallerMethod = "AuthorizeCore"
                }, "ValidateSession").ErrorCode == 24) {

                if (httpContext.Request.Cookies.AllKeys.Contains("hash")) {
                    FormsAuthentication.SignOut();
                    HttpContext.Current.Request.Cookies.Remove("hash");
                    return this.IsAuthorized = false;
                }
            }
            return this.IsAuthorized = true;
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new {
                        controller = "Account",
                        action = "Login"
                    }
                )
            );
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

我的主要课程代码:

namespace Portal.Controllers {
    [AuthorizedUser(IsAuthorized = true)]
    public class RequestsController : Controller {

       public PartialViewResult GetDetails(){
         return PartialView("_DetailsPartial", 
                 new DetailsModel {
                       RequestToDisplay = requestToDisplay
                 }
                );
       }
     }
  }

主视图和局部视图

重定向在部分视图下加载。尝试解决此问题以使其仅加载到主视图上。

我注意到该视图正在嵌入到主视图中。重定向被插入页眉和页脚之间。

4

0 回答 0