servicestack - 请求dto参数REQUIRED

时间:2016-10-14 13:15:48

标签: servicestack

我有一个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中所述?

1 个答案:

答案 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();
    }
}

Designing Message-based and HTTP APIs

注意一些序列化程序要求所有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) { ... }