我們有一個動作過濾器,ActionAuthorizationFilterAttribute,執行一些授權測試其OnActionExecuting方法(從會話獲取其權限,後來更多),和如果測試正常,則返回,如果不是,則設置ForbidResult上下文的結果屬性。到現在爲止還挺好。但是我們有一種情況,會話在一段空閒時間段後重新爲空,並且我們需要將請求路徑設置爲「/」,而不是用戶手動完成,因此例如,如果用戶正在嘗試在會話結束後訪問某個網址,例如http://mydomain/mywebapp/someurl,該方法應該將其返回到http://mydomain/mywebapp/,並且應用程序將再次啓動其會話init的東西。這在手工操作時有效,但在方法中不起作用。下面是該方法的代碼:變更請求路徑
public override void OnActionExecuting(ActionExecutingContext context)
{
var path = context.HttpContext.Request.Path.Value.Trim().ToLower();
var session = context.HttpContext.Session;
var permittedUrls = session.GetJson<List<string>>(SesstionStateKeys.PermittedUrls);
if (permittedUrls == null)
{
context.HttpContext.Request.Path = "/";
return;
}
if (permittedUrls.Any(url => path.Contains(url.Trim().ToLower())))
{
return;
}
context.Result = new ForbidResult(); //new UnauthorizedResult();
base.OnActionExecuting(context);
}
我們沒有使用ASP.NET Core MVC。我們使用帶有Web API的ASP.NET Core,這意味着我們的控制器只是返回數據而不是視圖。所有的視圖都由Angular和ui-router在客戶端處理。您的解決方案能否與我們的設置一起工如果是這樣,我需要改變行** context.HttpContext.Request.Path =「/」; ** to ** context.Result = new RedirectResult(「/」); **? – ashilon
如果你想返回你的用戶/客戶端一些「指令」來「提出索引/登錄頁面的新請求」 - 你應該返回一些東西。你的用戶/客戶會理解的東西。 「記錄」的東西(在您的文檔中)。沒有這個(只通過改變'Request.Path'),只有你的服務器會「做」某些「其他」,而不是客戶端。客戶會「認爲」他的電話,比如執行「/ api/create/magic」並創建了魔術,但如果用戶未經授權(由於會話/憑證過期),則不是這樣。 Imho返回'UnauthorizedResult'是您的案例的最佳選擇(更新我的答案)。 – Dmitry