-4
我需要在ASP.Net MVC應用程序的Action Filter中找到UserID
。我可以在一個正常的控制器中得到相同的結果,如下所示。在Action Filter中獲取UserID(不是Identity.Name)
我知道如何在操作過濾器獲得用戶名。
但是,當我試圖讓用戶ID,我得到錯誤
string userID = filterContext.HttpContext.User.Identity.GetUserID();
錯誤CS1061 '的IIdentity' 不包含一個定義爲 'GetUserID',沒有擴展方法 'GetUserID'接受類型'IIdentity'的第一個參數可能被發現
如何獲取用戶ID在動作過濾器?
更新 - 參考:
規範行爲過濾
using System;
using System.Collections.Generic;////Not used
using System.Linq;////Not used
using System.Web;////Not used
using System.Web.Mvc;
using System.Web.Routing;
using Microsoft.AspNet.Identity; ////Not used
namespace MyPortal
{
public class ActionFilterSessionCheck : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
string userName = null;
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
userName = filterContext.HttpContext.User.Identity.Name;
//ERROR***
//string userID = filterContext.HttpContext.User.Identity.GetUserID();
}
string sessionLogin = "Login" + userName;
if (userName == null || (System.Web.HttpContext.Current.Session[sessionLogin] == null))
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
//AJAX request
throw new Exception("Session time out");
}
else
{
// Standard request
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "Login" },
{ "controller", "Account" }
});
}
}
//Call standard behavior
this.OnActionExecuting(filterContext);
}
}
}
即使在過濾器中添加代碼也會出錯,如果您需要id,則需要通過名稱手動檢查名稱 –