私は既存の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私に知らせています。
'HttpContext.Current(.User)'の代わりに 'filterContext.HttpContext'と' Controller.User'を使ってみましたか? – yaakov
ええ、私もそれを試しましたが、同じnull値です。 – user3240560