将int的对象转换为int会给出一个空引用

thm*_*msn 2 c# asp.net-mvc membership-provider

几个小时以来,我一直在反对这个问题,这对我来说毫无意义.

我已经制作了一个asp.net mvc 3应用程序,我已经实现了表单身份验证.我已经创建了自己的自定义提供程序,我实现了GetUser(..)方法和ValidateUser(...)方法,其余的实现抛出了一个未实现的异常

我可以在登录页面上将我的登录信息提供给AccountController,我会收到一个欢迎用户名!很好,所以登录似乎工作.

现在我在我的FooController上有3个动作

  • 指数
  • FirstAction
  • SecondAction

具体实现如下所示

[HttpPost]
public JsonResult FirstAction(int param1, string param2, string param3)
{
    var userID = (int)Membership.GetUser().ProviderUserKey;
    ...
}

[HttpPost]
public JsonResult SecondAction(int param1, int param2, string param3)
{
    var userID = (int)Membership.GetUser().ProviderUserKey;
    ...
}
Run Code Online (Sandbox Code Playgroud)

正如您可能已经猜到的那样,我Index使用jQuery ajax功能从我的View 调用FirstAction和SecondAction .

以下行抛出null referencce异常:

var userID = (int)Membership.GetUser().ProviderUserKey;
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它只在SecondAction中抛出一个null引用,该调用在FirstAction中工作正常.

我试过像这样拆分它

var user = Membership.GetUser(); 
var providerKey = user.ProviderUserKey; 
var userID = (int)providerKey. 
Run Code Online (Sandbox Code Playgroud)

然而它仍然失败了.

Membership.GetUser(..)返回的MembershipUser对象具有存储在providerUserKey中的整数,而不是常规成员资格实现所具有的Guid.

任何形状或形式的任何帮助非常感谢.

Mar*_*ell 8

调试!有些东西不是你想象的那样!

var user = Membership.GetUser();
Debug.Assert(user != null);
var userKey = user.ProviderUserKey;
Debug.Assert(userKey != null);
var userID = (int)userKey;
Run Code Online (Sandbox Code Playgroud)