将二进制数组发布到Web API控制器

时间:2014-06-12 08:35:36

标签: asp.net-web-api asp.net-web-api2

我正在尝试发布包含少量字符串变量和二进制数组的表单数据。 下面是表单数据的模型。

public class FileModel
{
    public string Path { get; set; }
    public byte[] File { get; set; }
}

以下是我的Web API控制器。

[Route("")]
public IHttpActionResult Post([FromBody]FileModel media)
{      
    // Can I use ??
    byte[] requestFile = media.File;
    string requestFilePath = media.Path;

    //Process the above variables  
    return Ok();
} 

我想知道我是否可以使用以下代码反序列化以下代码片段以读取JSON有效内容中的值,包括二进制数据?

byte[] requestFile = media.File;
string requestFilePath = media.Path;

如果是,我是否需要定义任何格式化程序类才能使其正常工作?

我通常使用POSTMAN来测试我的RESTful端点。 是否可以使用POSTMAN仍然POST POST二进制数组?可能不需要编写我自己的客户端

2 个答案:

答案 0 :(得分:0)

您需要使用序列化程序将复杂对象(多个字段)序列化为Http请求的内容。

要让您的代码段从内容中读取对象,您可以使用此代码: var requestContent = Request.Content.ReadAsAsync<FileModel>(GetJsonSerializer()).Result;

这是序列化器样板代码。

private JsonMediaTypeFormatter GetJsonSerializer()
{
    JsonSerializerSettings settings = new JsonSerializerSettings()
    {
        PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All,
        TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All
    };

    return new JsonMediaTypeFormatter() { SerializerSettings = settings };
}

我不确定如何使用POSTMAN来测试它。一个简单的.net客户端将是:

var Client = new HttpClient();
Client.BaseAddress = new Uri("localhost"); //whatever your endpoint is
FileModel objectToSend = new FileModel();
var objectContent = new ObjectContent<FileModel>(objectToSend, GetJsonSerializer() );
var response = Client.PostAsync("uri", objectContent);

答案 1 :(得分:0)

您可以使用POSTMAN测试二进制文件输入。选择正文选项卡,然后您可以选择单选按钮&#34;二进制&#34;然后选择文件。