gpt4 book ai didi

servicestack - 请求 dto 参数 REQUIRED

转载 作者:行者123 更新时间:2023-12-05 05:22:35 25 4
gpt4 key购买 nike

我有一个这样的请求 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'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 的一些技巧。我将把这个 Request 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) { ... }

关于servicestack - 请求 dto 参数 REQUIRED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com