【发布时间】:2018-10-05 10:00:59
【问题描述】:
我正在尝试通过Newtonsoft.Json.Bson 从 C# 控制台客户端将图像及其元数据(如名称)发送到 WebApi Restful 服务器。
客户代码:
public async Task SendRequestAsync(byte[] imageBytes, string fileName)
{
using (var stream = new MemoryStream())
using (var bson = new Newtonsoft.Json.Bson.BsonWriter(stream))
{
var jsonSerializer = new JsonSerializer();
var json = JObject.FromObject(new
{
name = fileName,
content = imageBytes
});
jsonSerializer.Serialize(bson, json);
var client = new HttpClient
{
BaseAddress = new Uri("http://localhost:1920")
};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/bson"));
var byteArrayContent = new ByteArrayContent(stream.ToArray());
byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/bson");
var result = await client.PostAsync(
"api/Files", byteArrayContent);
try
{
HttpResponseMessage response = result.EnsureSuccessStatusCode();
Console.Out.WriteLine(response.IsSuccessStatusCode);
Console.Out.WriteLine(response.Headers);
Console.Out.WriteLine(response.Content);
Console.Out.WriteLine(response.StatusCode);
}
catch (Exception e)
{
Console.Out.WriteLine(e);
}
}
}
服务器代码
// WebApi Controller
public JsonResult<object> Post([FromBody]FileModel fileModel)
{
Console.Out.WriteLine(fileModel.name);
Console.Out.WriteLine(fileModel.length);
return Json<object>(new
{
status = HttpStatusCode.OK,
length = fileModel.length,
name = fileModel.name
});
}
// Model Class
public class FileModel
{
public string name { get; set; }
public byte[] content { get; set; }
public int length { get; set; }
}
如果我发送 28KB 的图像,则服务器成功接收图像。但如果我尝试发送 20MB 的图像,则会出现以下错误
System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
at FileUploadConsole.Program.<SendRequestAsync>d__1.MoveNext() in c:\users\Projects\FileUploadConsole\FileUploadConsole\Program.cs:line 58
第 58 行是HttpResponseMessage response = result.EnsureSuccessStatusCode();
为什么大图找不到服务?
【问题讨论】:
-
它可能取决于网络服务器配置。我的意思是最大请求大小。
-
在服务器端,我将
maxRequestLength设置为 > 145MB -<httpRuntime targetFramework="4.6.1" maxRequestLength="150536"/>,但错误仍然相同。我尝试上传 27MB 的图片。
标签: c# json rest asp.net-web-api2 bson