2016-05-01 10 views
0

私は既存のmvcアプリケーションでカスタム認証(corpとliveを使用してライブ)を実装しています。これを実装するには、Filterクラス、ホームコントローラ、デフォルトコントローラ(API)、アカウントコントローラを使用しています。ホームコントローラとデフォルトコントローラは、以下のコードのように装飾されているので、すべてのページヒットをユーザーに許可することができます。ユーザー・アクセスは、サイトホームコントローラは、デフォルトで呼び出された後、フィルタリングされますが、私は、ユーザーを認証し、コードHttpContext.User.Identityと現在のユーザーセッションオブジェクトがMVC APIコントローラでnullの理由

public void OnAuthorization(AuthorizationContext filterContext) 
{ 
     UserIdentities objIdentity = new ContextUser(userIdentity.EmailAddress); 
     HttpContext.Current.User = new GenericPrincipal(objIdentity, null); 
} 

以下のような現在のコンテキストのユーザーを設定しています、自動的に呼び出されますとき、私はアイデンティティの値にできていますコードの下のようなホームコントローラで(ユーザーのメール)、ページが私はそこにユーザーの電子メールアドレスを渡すことによって、コード以下のようないくつかのデータを取得するために、デフォルトのコントローラ(API)メソッドを呼び出していますロードされた後、一旦

[AuthorizeFilter] 
[ErrorFilter] 
public class HomeController : Controller 
{    
    [ValidateInput(false)] 
    public ActionResult Index() 
    { 
     string userEmailAddress=((ContextUser)HttpContext.User.Identity).EmailAddress; 
     return View(); 
    }   

}

私はできません私はいつもヌル値を得ているので、デフォルトのコントローラーのユーザーの電子メールアドレスにログオンしています。

[HttpGet] 
    public string GetOrg() 
    { 
     //getting null value 
     string a = RequestContext.Principal.Identity.Name; //null 
     string b = HttpContext.Current.User.Identity.Name; //null 
     string c = base.ControllerContext.RequestContext.Principal.Identity.Name;// null 
     //I able to set the User Email Address session value in azurize filter but able to read in default controller. 
     string d = HttpContext.Current.Request.RequestContext.HttpContext.Session["UserEmail"].ToString();//null 
     return repository.FetchOrg(a or b or c or d); 
    } 

は、すべての値は、APIコントローラのどこかで休んでいるようで、わからない私が行方不明です何を、どこでwrong.Kindly私に知らせています。

+0

'HttpContext.Current(.User)'の代わりに 'filterContext.HttpContext'と' Controller.User'を使ってみましたか? – yaakov

+0

ええ、私もそれを試しましたが、同じnull値です。 – user3240560

答えて

0

Global.asax.csファイルに以下のコードを追加してセッション値を取得できました。ありがとうチーム。

protected void Application_PostAuthorizeRequest() 
{ 
     System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required); 
} 
関連する問題