我正在尝试发布包含少量字符串变量和二进制数组的表单数据。 下面是表单数据的模型。
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二进制数组?可能不需要编写我自己的客户端
答案 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;然后选择文件。