【问题标题】:ODataController and binary dataODataController 和二进制数据
【发布时间】:2014-05-09 12:28:41
【问题描述】:

在 ODataController(在 .net 中)上支持接受二进制数据的最佳方式是什么?二进制流可以很大,至少 2MB。我有一个从 ODataController (System.Web.Http.Odata.OdataController) 派生的控制器。

  • 如何让这个控制器接受除 application/json 以外的 Content-Type(可能是 application/octet-stream)
  • 我在上传时使用二进制数据的 base64 编码字符串。有更好的方法吗?

我目前在 ODataController 中的内容是:

[HttpPut] public float Put(string userId, string userType, [FromBody] string base64data)

两个痛点:

  • base64data 解析为 null,除非字符串包含在对象中。例如,像“This is a string”这样的正文会产生空值。正文 "{"value":"This is a string"}" 解析良好。
  • 如果我发送超过 2MB 的数据,我会再次收到 null(没有错误)。

有什么方法可以在 odata 端点上以更高的允许限制和有效的方式支持二进制数据?

【问题讨论】:

    标签: asp.net odata


    【解决方案1】:

    我怎样才能让这个控制器接受一个 Content-Type 不是 application/json (可能是 application/octet-stream)

    使用自定义媒体类型格式化程序Checkout an example here...

    我在上传时使用二进制数据的 base64 编码字符串。 有更好的方法吗?

    如果您不想通过自定义媒体格式化程序路线,那么您最好将二进制数据发布为multipart/form-dataSample here

    base64data 解析为 null,除非字符串包含在对象中。 例如,像“This is a string”这样的正文会产生空值。这 body, "{"value":"This is a string"}" 解析得很好。

    这是因为默认的 json 媒体格式化程序需要一个 json 字符串。但是,您的自定义媒体类型格式化程序将采用原始字符串。

    如果我发送超过 2MB 的数据,我会再次收到 null(没有 错误)。

    因为您超出了最大限制。您可以使用以下方法更改:

    <configuration>
    <appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
    </appSettings>
    </configuration>
    

    在此处了解更多信息http://support.microsoft.com/kb/2661403

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多