【问题标题】:WebApi - Response status code does not indicate success: 404 (Not Found)WebApi - 响应状态码不表示成功:404(未找到)
【发布时间】: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 - &lt;httpRuntime targetFramework="4.6.1" maxRequestLength="150536"/&gt;,但错误仍然相同。我尝试上传 27MB 的图片。

标签: c# json rest asp.net-web-api2 bson


【解决方案1】:

把它放在你的 web.config 中:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="4294967295" /> 
    </requestFiltering>
  </security>

maxAllowedContentLength 指定最大内容长度(以字节为单位)并由 uint 表示,请参阅reference。 我的示例中的值设置为greatest possible uint value (4 gb)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2021-11-02
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多