首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET 6在类定义中指定参数位置

.NET 6在类定义中指定参数位置
EN

Stack Overflow用户
提问于 2022-07-27 13:00:05
回答 1查看 64关注 0票数 0

假设我的API中有下面的URL模板:

/obj/execute/{compositeIdOne:int:required}/{compositeIdTwo:int:required}

映射到以下控制器操作:

public async Task<ActionResult> SomeTask(RequestObject requestObj, CancellationToken ct = default) { ... }

请求机构如下:

代码语言:javascript
运行
复制
{
  "status": "string",
  "name": "string",
  "amount": 10
}

现在,假设我希望将请求体和路由参数都插入到指定的RequestObject参数中。当然,我可以将路由中的ids作为单独的参数提供,然后在函数体中设置对象的属性,但这感觉很糟糕。

我是否能够在类定义中指定参数位置,并让.NET自动填充对象。

例如:

代码语言:javascript
运行
复制
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的使用更加干净。

当然,为实现这一目标而提出的任何其他建议都将受到赞赏。

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2022-07-28 06:52:30

我认为您最好使用两个对象,一个用于查询数据,一个用于正文数据:

型号:

代码语言:javascript
运行
复制
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; }
    }

行动:

代码语言:javascript
运行
复制
[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,您需要为每个模型绑定一个自定义模型绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73138426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档