是否有任何声明性方式来检查 C# REST 服务控制器中输入参数的有效性?
Posted
技术标签:
【中文标题】是否有任何声明性方式来检查 C# REST 服务控制器中输入参数的有效性?【英文标题】:Is there any declarative way to check validity of input parameters in C# REST service controllers? 【发布时间】:2020-09-24 23:55:17 【问题描述】:假设我有一个具有以下方法的控制器类
public async Task<XYZ> ProcessSomeAPICall(User u, int a, string b, bool c)
if (u.Name == "Bubba" && a < 10)
throw new BubbaException("there is no way Bubba can do more then 10")
if (u.Position == null && !c)
throw new EmploymentException("user without a job should have c set up")
//... more input parameter checks here
return await executeSomeApplicationLogic(u, a, b, c);
是否有任何框架可以帮助我最大限度地减少执行参数检查所需编写的条件代码的数量?
【问题讨论】:
【参考方案1】:您可以使用 FluentValidation 来验证您的输入并提高可读性。
public class UsersController : ControllerBase
public async Task<XYZ> ProcessSomeAPICall(RegisterUserCommand command) // command => user in your sample
command.Validate();
public class RegisterUserCommand
public string UserName get; set;
// some properties
public void Validate()
new RegisterUserCommandValidator().Validate(this).RaiseExceptionIfNeed();
public class RegisterUserCommandValidator : AbstractValidator
public RegisterUserCommandValidator()
RuleFor(p=> p.UserName).NotEmpty().NotNull().WithMessage("some-message");
【讨论】:
以上是关于是否有任何声明性方式来检查 C# REST 服务控制器中输入参数的有效性?的主要内容,如果未能解决你的问题,请参考以下文章
C#:如何以编程方式检查 Web 服务是不是已启动并正在运行?