C# mvcapi中的控制器输入验证
我已经构建了一个api,需要验证作为参数传递给控制器操作的输入对象。 有时,同一输入类对于不同的操作具有不同的强制属性 所以 我已经看过fluentValidation.net,但似乎每个类都必须创建规则,而不是类/操作C# mvcapi中的控制器输入验证,c#,asp.net-mvc,fluentvalidation,C#,Asp.net Mvc,Fluentvalidation,我已经构建了一个api,需要验证作为参数传递给控制器操作的输入对象。 有时,同一输入类对于不同的操作具有不同的强制属性 所以 我已经看过fluentValidation.net,但似乎每个类都必须创建规则,而不是类/操作 谢谢。什么是用户 我的意思不是说类定义在哪里,而是说它在域中的物理意义是什么?听起来你想让它有多重含义 与其尝试将这些操作放入域的模型中,不如为它们创建操作模型。大概是这样的: class CreateUserAction { public string Username
谢谢。什么是
用户
我的意思不是说类定义在哪里,而是说它在域中的物理意义是什么?听起来你想让它有多重含义
与其尝试将这些操作放入域的模型中,不如为它们创建操作模型。大概是这样的:
class CreateUserAction
{
public string Username {get; set;}
}
class DeleteUserAction
{
public int ID {get; set;}
}
然后在行动方法中使用这些方法:
public ActionResult Create(CreateUserAction user)
{
}
public ActionResult Delete(DeleteUserAction user)
{
}
这将根据单一责任原则,将不同的目的划分为不同的类别。现在,User
类可以专注于简单地表示用户对象,而不是有时表示尚未创建的用户或有时仅表示用户对象的ID等
这里的一个主要好处是,您可以直接在类中指定验证规则。使用这种方法,用户
对象总是需要用户名
和ID
才有效。而CreateUserAction
对象甚至没有ID
(因为它不需要),而DeleteUserAction
对象没有Username
(因为它不需要)
您可以根据需要进一步添加其他字段。例如,CreateUserAction
对象可能会有其他字段来描述正在创建的用户。(它甚至可能有一些字段根本不在用户
对象上,但会被转换为域中的其他对象。)然而,删除用户操作
可能只需要一个ID
(正如SLaks所建议的,对于该动作方法,可能只需要一个int
,但这取决于您)
类的角色和职责更清晰,部分初始化的半对象更少。为什么不让Delete
只获取一个ID?您可以为控制器使用不同的视图模型,其中只包含完成操作所需的属性。谢谢。我已经完成了这些工作。除了using继承和我放置所有fluent规则的空子类公共类用户{public string name{get;set;}}}公共类myUser:User{}公共类myUser Validator:AbstractValidator{//rules}在如何序列化到基类型方面没有问题。
public ActionResult Create(CreateUserAction user)
{
}
public ActionResult Delete(DeleteUserAction user)
{
}