我有一个非常奇怪的问题:客户端上非 null 的 DTO 实例在服务器端被接收为 null
。有什么想法可能导致这种情况吗?我什至不知道应该从哪里开始寻找......
一些代码(这正是我正在执行的代码):
客户端:
public class AuthenticatedUser
{
private readonly UserDto _user;
// ...
public bool SetNewPassword(string oldPasswordHash, string newPasswordHash)
{
using (var userService = new UserServiceClient())
{
if(_user == null)
throw new InvalidOperationException("Client side");
return userService.SetNewPassword(_user, oldPasswordHash,
newPasswordHash);
}
}
}
当我添加服务引用时,UserDto
类已自动创建。
服务器端:
public class UserService : IUserService
{
// ...
public bool SetNewPassword(UserDto userDto, string oldPasswordHash,
string newPasswordHash)
{
using (var unitOfWork = _unitOfWorkFactory.Start())
{
if (userDto == null)
throw new InvalidOperationException("Server side");
var user = unitOfWork.Repository.Get<User>()
.ByUserNameAndPasswordHash(userDto.UserName,
oldPasswordHash);
if (user == null)
return false;
user.PasswordHash = newPasswordHash;
return true;
}
}
}
我收到带有“服务器端”文本的 InvalidOperationException
...
更新:
服务器端的 UserDto
类如下所示:
public class UserDto
{
public UserDto() {}
public UserDto(User domainObject)
{
Mapper.Map(domainObject, this);
}
public String AcademicDegree { get; set; }
public String EmailAddress { get; set; }
public String FirstName { get; set; }
public Gender Gender { get; set; }
public Boolean HasChangedPassword { get; set; }
public Int32 Id { get; set; }
public Boolean IsActive { get; set; }
public String LastName { get; set; }
public IEnumerable<MailboxDto> Mailboxes { get; set; }
public String PasswordHash { get; set; }
public String PronunciationOfName { get; set; }
public String Role { get; set; }
public IList<ScheduledGreetingDto> ScheduledGreetings { get; set; }
public LanguageDto SpeakerLanguage { get; set; }
public String Title { get; set; }
public String UserName { get; set; }
}
有趣的是,我尝试传输的客户端的 _user
字段是客户端通过调用另一个服务方法从服务器获得的实例,即传输 UserDto
似乎一般都有效...
最佳答案
最可能的情况是 UserDto
对象不相同 - 命名空间已更改,属性不匹配。如果您使用生成的代理,请尝试更新服务引用...
以确保客户端和服务器同步。
您可能想要使用 Fiddler 来查看两个应用程序之间发送的内容。这将让您检查是否是序列化问题(客户端未正确发送数据)和反序列化问题(服务器未正确接收数据)。
关于c# - DTO从客户端传输到服务端后变为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713946/