2014-05-08 100 views
0

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

  • 我怎样才能让这个控制器接受除应用/ JSON以外的内容类型(应用程序/八位字节流也许)
  • 我使用在上传二进制数据的base64编码字符串。有更好的方法吗?

我目前ODataController里面是什么:

[HttpPut] 公众持股量将(字符串userid,字符串USERTYPE,[FromBody]串base64data)

两个痛点:

  • base64data解析为空,除非字符串被包装在一个对象中。例如,像“这是一个字符串”这样的主体会导致null。正文“{”value“:”这是一个字符串“}”解析正常。
  • 如果我发送超过2MB的数据,我又收到一个null(没有错误)。

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

回答

0

我怎样才能让这个控制器接受比 应用/ JSON(应用程序/八位字节流可能)以外的内容类型

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

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

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

base64data解析为空,除非字符串包装在对象中。 例如,像“This is a string”这样的主体会导致null。 正文“{”value“:”这是一个字符串“}”解析正常。

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

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

因为你超过了最大限制。你可以改变使用:

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

这里了解更多http://support.microsoft.com/kb/2661403