ODataController和二进制数据

时间:2014-05-08 20:41:47

标签: asp.net odata

支持在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,除非字符串包装在对象中。例如,像"这是一个字符串"结果为null。身体," {"价值":"这是一个字符串"}"解析得很好。
  • 如果我发送超过2MB的数据,我会再次收到空(没有错误)。

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

1 个答案:

答案 0 :(得分:1)

  

如何让此控制器接受除以外的内容类型   application / json(application / octet-stream)

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

  

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

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

  

base64data解析为null,除非字符串包装在对象中。   例如,像"这是一个字符串"结果为null。该   身体," {"价值":"这是一个字符串"}"解析得很好。

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

  

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

因为您超过了最高限额。您可以使用以下方式更改它:

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

在此处了解详情http://support.microsoft.com/kb/2661403