我正在尝试通过网络方法将用户的帖子存储到访问数据库中。我想存储登录用户的用户名,用户的帖子和发布日期时间。
到目前为止,我可以通过硬编码存储现有的用户帖子。但我希望由任何登录用户存储帖子。我被告知我需要获取用户名的用户名。
因此,我发现并尝试添加以下代码:
//GetUser() returns current user information
MembershipUser user = Membership.GetUser();
//Returns the UserID and converts to a string
string UserID = user.ProviderUserKey.ToString();
当我尝试使用断点进行调试时,第一个是正常的。但对于第二个,VS 2010表示“对象引用未设置为对象的实例”。我该如何解决?
VS建议添加“新”,但这不起作用。它还建议捕获NullReferenceException,但我不知道如何使用它们提供的代码:public class EHClass
{
void ReadFile(int index)
{
// To run this code, substitute a valid path from your local machine
string path = @"UsersDB_in_App_Data";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (System.IO.IOException e)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
finally
{
if (file != null)
{
file.Close();
}
}
// Do something with buffer...
}
}
您能否向我提供我需要做什么的建议,或者另外一种获取用户名的用户ID的方法?
答案 0 :(得分:2)
您没有指明您拥有的MembershipUser类型,但ProviderUserKey完全依赖于底层数据存储。
例如,sql成员资格提供程序将此值存储为GUID。
如果此属性可能不包含任何有用的数据,那么您需要在访问它之前测试它是否存在:
//Returns the UserID and converts to a string
string UserID;
if ((myObject != null) && (myObject.ProviderUserKey != null)) {
UserId = myObject.ProviderUserKey.ToString();
} else {
UserId = String.Empty;
}
此外,除非您在直接asmx Web服务中使用WSE,否则我认为会员提供商不会有任何有效数据可供使用。
如果是这种情况,您可能需要切换到WCF或实施WSE(不推荐)。
答案 1 :(得分:1)
您获得的异常意味着myObject(当前用户)为null或myObject.ProviderUserKey为null。我建议当你设置myObject后到达断点时,你应该检查myObject的值,看看它是否为空。
取决于实际上为null的内容会影响您查找问题的位置。如果myObject为null,那么您需要查看代码以获取当前用户,并检查是否有人实际登录等。如果ProviderUserKey为null,请考虑您是否需要此ID或者只是更好直接使用用户名,检查成员资格提供者是否实际以任何有意义的方式提供该属性。
答案 2 :(得分:0)
相反,您可以直接使用此代码....
string UserID = MembershipUser.ProviderUserKey.ToString();