【发布时间】:2018-07-13 00:44:46
【问题描述】:
我在 API 控制器上有这样的操作:
[HttpPost]
public async Task<IActionResult> StartDeployment(
[FromQuery]Guid deploymentId,
[FromRoute]RequestInfo requestInfo,
[FromBody]DeploymenRequest deploymentRequest)
{
}
可通过复杂的 url (requestInfo) 获得并接收 HTTP POST 请求负载 (deploymentRequest)。
是否可以将[FromRoute] 和[FromBody] 结合起来,所以我将拥有单一请求模型:
public class UberDeploymentRequestInfo
{
[FromQuery]public Guid DeploymentId { get; set; }
[FromRoute]public RequestInfo RequestInfo { get; set; }
[FromBody]public DeploymenRequest DeploymentRequest { get; set; }
}
所以我可以使用 Fluent Validation 拥有单个验证器:
internal class UberDeploymentRequestInfoValidator : AbstractValidator<UberDeploymentRequestInfo>
{
public UberDeploymentRequestInfoValidator()
{
// validation rules can access both url and payload
}
}
【问题讨论】:
-
我对这个问题很感兴趣 :-) 到目前为止我走的路线是在控制器方法中将路线参数应用于模型,然后验证模型 - 不是理想的解决方案。
-
@john:这里也一样:我可以访问所有参数的唯一地方是控制器本身,因此必须在那里执行验证。我想要单独的验证器和清理操作。
-
您可以在自定义模型绑定器中执行此操作?
-
@DavidG:酷!希望看到一些示例/指针。谢谢!
-
@abatishchev 既然您显然在github.com/aspnet/Mvc/issues/8111 得到了答案,您介意在此处发布以确保完整性吗?
标签: c# asp.net-core fluentvalidation asp.net-core-routing