我有这样的请求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中所述?
您可以使用ServiceStack的内置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发送。
您可以在此先前的答案中找到有关在ServiceStack中设计基于消息的API和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) { ... }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句