2017-06-19 60 views
0

這是一個更新:定製AuthorizeAttribute只適用於開發環境

到asp.net開發我是新的,這是我第一次部署應用程序。它在開發環境中運行良好,在Visual Studio中進行調試。但是,當我部署,我得到的

401(未授權)

錯誤,當我登錄。

我使用的角前端這使得該發佈請求需要通過OAuth的令牌。我收到此令牌,然後嘗試獲取當前授權用戶。用戶控制器使用繼承AuthorizeAttribute屬性的自定義授權屬性。這是當我得到這個錯誤,但只在生產環境。在開發環境中,使用visual studio,iis express和localdb一切正常。

因此,這裏是我的問題:有什麼可以爲它的原因是什麼?在IIS或Visual Studio部署中是否存在一些配置?有什麼我必須改變代碼中的某個地方,使其在生產環境中工作?

我已經做了在代碼中使用一點更多的研究和這裏的東西:自定義AuthorizeAttribute作品就像在開發環境中的魅力,而不是在生產。

我發現到目前爲止是:base.IsAuthorized(actionContext)始終返回false,即使令牌正確發送。我使用Chrome ARC插件發送請求。此外,ClaimsIdentity似乎沒有找到'UserId'索賠。這裏有一個小編碼:

protected override bool IsAuthorized(HttpActionContext actionContext) { 

     if (!base.IsAuthorized(actionContext)) 
      return false; 

     ClaimsPrincipal principal = GetRequestClaimsPrincipal(actionContext.ControllerContext.Controller); 

     var currentAccountPermission = GetAccountPermission(principal.Identity); 

     return HasPermission(currentAccountPermission); 
    } 



    private ClaimsPrincipal GetRequestClaimsPrincipal(IHttpController controller) { 
     return ((ApiController)controller).Request.GetRequestContext().Principal as ClaimsPrincipal; 
    } 

    private IEnumerable<UserPermission> GetAccountPermission(IIdentity identity) 
    { 
     var claimsIdentity = new ClaimsIdentity(identity); 
     var id = Convert.ToInt32(claimsIdentity.FindFirst("UserId").Value); 

     var accountPermissions = _userPermissionService.GetPermissionByUserId(id); 

     return accountPermissions; 
    } 

在此塊

if (!base.IsAuthorized(actionContext)) 
    return false; 

它始終返回false。而在此塊

var id = Convert.ToInt32(claimsIdentity.FindFirst("UserId").Value); 

它拋出一個System.NullReferenceException

提醒的是,這些問題只能在生產環境發生。

所以,這可能是什麼?我將數據從開發數據庫複製到生產數據庫,所以錯誤不能從那裏出來。這可能是HttpActionContext對象中的某個問題嗎?從生產環境中會發生這種情況的開發環境可以改變什麼?

謝謝。

回答

0

的多次我部署了應用程序,我與Visual Studio Web Deploy Package做到了。我真的做了好幾次,只是爲了測試我是否做得對。之後,我開始直接發佈Web Deploy。 在IIS中我的網站樹就像

|-Sites 

|----Default 

|-------MyApplication 

正如我說,這沒有奏效。我決定從頭再來,並刪除網站,刪除相關的應用程序池並公佈利用Web Deploy,但這個時候我的網站的樹就像

|-Sites 

|----MyApplication 

...現在它的工作。原因是什麼?