假设我的API中有下面的URL模板:
/obj/execute/{compositeIdOne:int:required}/{compositeIdTwo:int:required}
映射到以下控制器操作:
public async Task<ActionResult> SomeTask(RequestObject requestObj, CancellationToken ct = default) { ... }
请求机构如下:
{
"status": "string",
"name": "string",
"amount": 10
}现在,假设我希望将请求体和路由参数都插入到指定的RequestObject参数中。当然,我可以将路由中的ids作为单独的参数提供,然后在函数体中设置对象的属性,但这感觉很糟糕。
我是否能够在类定义中指定参数位置,并让.NET自动填充对象。
例如:
public class RequestObject
{
[FromRoute("compositeIdOne")]
public int IdOne { get; set; }
[FromRoute("compositeIdTwo")]
public int IdTwo { get; set; }
[FromBody("status")]
public string Status { get; set; }
[FromBody("name")]
public string Name { get; set; }
[FromBody("amount")]
public int Amount { get; set; }
}我意识到这可能是一个非常抽象的用例,但是它会使控制器更加干净,并且使API的使用更加干净。
当然,为实现这一目标而提出的任何其他建议都将受到赞赏。
提前谢谢你!
发布于 2022-07-28 06:52:30
我认为您最好使用两个对象,一个用于查询数据,一个用于正文数据:
型号:
public class QueryObject
{
public int compositeIdOne { get; set; }
public int compositeIdTwo { get; set; }
}
public class RequestObject
{
public string Status { get; set; }
public string Name { get; set; }
public int Amount { get; set; }
}行动:
[HttpPatch("/obj/execute/{compositeIdOne:int:required}/{compositeIdTwo:int:required}")]
public async Task<ActionResult> SomeTask(QueryObject q,[FromBody]RequestObject requestObj, CancellationToken ct = default) { ... }或者您可以尝试使用自定义模型绑定,这里是一个关于绑定查询的link,这里是关于绑定主体data.But的link,您需要为每个模型绑定一个自定义模型绑定。
https://stackoverflow.com/questions/73138426
复制相似问题