如何在 ASMX 网络服务中获取用户名的用户 ID

Posted

技术标签:

【中文标题】如何在 ASMX 网络服务中获取用户名的用户 ID【英文标题】:How to get userID for username in ASMX webservice 【发布时间】:2011-12-16 02:07:09 【问题描述】:

我正在尝试通过网络方法将用户的帖子存储到访问数据库中。我想存储登录用户的用户名、用户的帖子和发布日期时间。

到目前为止,我可以通过硬编码存储现有的用户帖子。但我想存储任何登录用户的帖子。有人告诉我我需要获取用户名的用户 ID。

因此,我找到并尝试添加以下代码:

//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...
    


你能给我建议我需要做什么,或者另一种方法来获取用户名的 userID 吗?

【问题讨论】:

【参考方案1】:

您没有说明您拥有的 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(不推荐)。

【讨论】:

【参考方案2】:

您遇到的异常意味着 myObject(当前用户)为 null 或 myObject.ProviderUserKey 为 null。我建议当你在设置 myObject 后到达断点时,你应该检查 myObject 的值,看看它是否为空。

取决于实际为 null 的内容会影响您查找问题的位置。如果 myObject 为空,那么您需要查看代码以获取当前用户,并检查是否有人实际登录等。如果 ProviderUserKey 为空,请考虑您是否需要此 ID,或者最好只使用直接使用用户名,检查成员资格提供者是否真的以任何有意义的方式提供该属性。

【讨论】:

【参考方案3】:

您可以直接使用此代码....

string UserID = MembershipUser.ProviderUserKey.ToString();

【讨论】:

以上是关于如何在 ASMX 网络服务中获取用户名的用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用Ajax Jquery和asmx服务获取Id的数据

ASMX:在运行时设置用户/密码

Azure 使用 Azure 函数保护 WCF asmx

如何使用 iOS SDK 从 ASMX Web 服务中获取和解析 JSON?

在 Kong 中启用基本身份验证和会话插件时如何获取用户 ID?

如何在 Yii 中获取登录用户的电子邮件 ID?