【问题标题】:Post multiple primitive parameters发布多个原始参数
【发布时间】:2020-06-08 13:38:16
【问题描述】:

在 .net core 之前,Rick Strahl 有一篇很棒的文章,介绍了如何在 web api 中发布和接受原始参数。我能够使用他的解决方案来接受多个原始参数。

.net core 发生了一些变化,他在这里提供了类似的解决方案:https://weblog.west-wind.com/posts/2017/sep/14/accepting-raw-request-body-content-in-aspnet-core-api-controllers

虽然只有一个问题,这个解决方案似乎只支持 1 个参数。在之前的解决方案中,他在读取内容时缓存了数据,以便后续请求不需要再次读取(因为它只能读取一次)。但是,这次不同的是,您必须使用 [FromBody] 属性,如果您不使用该属性,它不会触发自定义 InputFormatter 上的方法来获取参数。但是,如果您多次使用此属性,.net 会引发异常。它完全忽略了这样一个事实,即您可能已经自己处理了缓存内容的问题,因此它似乎绝对强制解决了只允许您以这种方式发布单个参数的问题。

我一直能够在我使用过的其他框架中传递多个单个原始值,并且我对必须为我可能在所有服务中使用的每个参数组合创建一个强类型类库不感兴趣来电。有没有办法解决这个问题?

在为 web api 找到解决方法之前(在核心之前),有人决定不使用 webapi 只是因为这个问题,所以我知道我并不孤单。所以要明确一点,我知道如何修改我的代码以使用替代解决方案完成手头的任务......但如果可能的话,我希望实际上能够使用多个参数。

【问题讨论】:

    标签: asp.net-core-webapi


    【解决方案1】:

    你可以有很多参数,但是每个动作只能绑定一个参数,这是因为一个 HTTP 消息只能有一个正文。所以,当body中有多个参数需要绑定时,可以将它们组合成一个类,将这些参数包装/保存为属性,并使用这个对象来绑定参数。

    有一个类似的问题here,可以参考一下。

    【讨论】:

    • 不,这不是 b/c 只有一个身体。这是 b/c Microsoft 添加验证以防止使用多个 FromBody 属性。自定义解决方案绝对没有理由在第一次读取时无法缓存参数。这正是我用于 web api 的解决方案所做的 b/c 它不需要 FromBody 属性就可以像 .net core 那样工作。
    猜你喜欢
    • 2018-08-08
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2011-05-26
    相关资源
    最近更新 更多