我有一个DTO请求:
[Route("/appusers/resetpwd/{UserId}", "PUT")]
public class ResetPassword : IReturn<AppUserDto>
{
public Guid UserId { get; set; }
public string OldPassword { get; set; }
public string NewPassword { get; set; }
public ResetPassword(Guid userId, string oldPassword, string newPassword)
{
UserId = userId;
OldPassword = oldPassword;
NewPassword = newPassword;
}
}
元数据页面在列表中显示三个属性为REQUIRED = No.他们可以被要求吗?或者这只是意味着我必须在服务器上检查它们并抛出异常,如wiki中所述?
答案 0 :(得分:2)
您可以使用ServiceStack's built-in ValidationFeature声明必填字段,例如:
在AppHost中启用:
Plugins.Add(new ValidationFeature());
//Register All Validators in Assembly
container.RegisterValidators(typeof(MyValidator).Assembly);
配置:
public class ResetPasswordValidator : AbstractValidator<ResetPassword>
{
public ResetPasswordValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.OldPassword).NotEmpty();
RuleFor(x => x.NewPassword).NotEmpty();
}
}
注意一些序列化程序要求所有DTO都有一个无参数构造函数。此外,重置用户密码不是有效的PUT
操作,它应该是幂等的并且大致转换为“在此位置放置此资源”,它更适合作为POST发送。
您可以在此previous answer中找到有关在ServiceStack中设计基于消息和HTTP API的一些提示,我将把此请求DTO重写为:
[Route("/users/{UserId}/reset-password", "POST")]
public class ResetPassword : IReturn<ResetPasswordResponse>
{
public Guid UserId { get; set; }
public string OldPassword { get; set; }
public string NewPassword { get; set; }
}
虽然如果此服务不需要返回响应,它也可以返回void,例如:
public class ResetPassword : IReturnVoid { ... }
并在您的服务中实施:
public void Any(ResetPassword request) { ... }