2017-08-16 64 views
-4

我需要在ASP.Net MVC應用程序的Action Filter中找到UserID。我可以在一個正常的控制器中得到相同的結果,如下所示。在Action Filter中獲取UserID(不是Identity.Name)

enter image description here

我知道如何在操作過濾器獲得用戶名。

enter image description here

但是,當我試圖讓用戶ID,我得到錯誤

string userID = filterContext.HttpContext.User.Identity.GetUserID(); 

錯誤CS1061 '的IIdentity' 不包含一個定義爲 'GetUserID',沒有擴展方法 'GetUserID'接受類型'IIdentity'的第一個參數可能被發現

如何獲取用戶ID在動作過濾器?

更新 - 參考:

  1. ClaimsIdentityExtensions

規範行爲過濾

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

} 
+0

即使在過濾器中添加代碼也會出錯,如果您需要id,則需要通過名稱手動檢查名稱 –

回答

3

你需要的功能是GetUserId,不GetUserID。它被定義爲here

您的工作示例與您的錯誤之間的區別僅僅是您錯誤地使用了ID而不是Id

相關問題