【问题标题】:415 Unsupported Media Type issue in my Controller [C#]415 我的控制器中不支持的媒体类型问题 [C#]
【发布时间】:2021-03-29 01:53:12
【问题描述】:

我创建了一个端点,以便 Google 可以访问一些数据库图片。这就是我的 Endpoint 的样子。

      [HttpGet]
      [Route("MiniPicture")]
      [Produces("image/png")]
      public async Task<IActionResult> GetPictureAsync(Selector selector)
      {

        var resultFromService = await _xxx.GetPicturefromDB(selector, "de3-ae21a5a7b1fd");

        var reponseAsByte = resultFromService.Results[0].Result.PictureAsByteArray;

        if (reponseAsByte != null)
        {
          var resp = File(reponseAsByte, "image/png");
          return resp;
        }
        return Ok(resultFromService.Results.FirstOrDefault());
      }

上面的 MiniPicture 在我的 Google Controller 中。所以我的 Get 请求看起来像这样(我在 Query 中发送我的承载,因为我必须对用户进行身份验证,因为我正在使用身份服务器 4 ......但身份验证工作正常......)

http://xxx/ccc/fff/v1/google/MiniPicture?ProductId=2755&Bearer=eyJhbGciOiJSUzI1N...

我已经用我的 Google Action 和 Postman 尝试过这个,我变成了以下错误:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",
    "title": "Unsupported Media Type",
    "status": 415,
    "traceId": "|872be489-42f772a16832ade1."
}

如果你能告诉我我应该检查什么将会非常有帮助:s 这个错误让我疯了

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller controller


    【解决方案1】:

    所以基于我对 HTTP 状态 415 的发现

    HTTP 415 Unsupported Media Type 客户端错误响应代码 表示服务器拒绝接受请求,因为 有效负载格式是不受支持的格式。

    我认为您需要指定此端点期望的输入类型。 您只说明了它会产生什么,因此请尝试添加它所期望的信息。

    另外,为什么选择 Selector?我希望那个参数中有一个数字数据类型,因为你给它一个 ID :))

    【讨论】:

      【解决方案2】:

      这是一个基于你的控制器代码编写的示例,它运行良好:

      [HttpGet]
      [Produces("image/png")]
      public async Task<IActionResult> GetPictureAsync()
      {   
          //var resultFromService = await _xxx.GetPicturefromDB(selector, "de3-ae21a5a7b1fd");
      
          //var reponseAsByte = resultFromService.Results[0].Result.PictureAsByteArray;
        
          var reponseAsByte = System.IO.File.ReadAllBytes(@"C:\\REPOS\\Test.png");       
      
          if (reponseAsByte != null)
          {
              var resp = File(reponseAsByte, "image/png");
              return resp;
          }
      
          return Ok(reponseAsByte);
      }
      

      示例代码的遗漏部分

          var resultFromService = await _xxx.GetPicturefromDB(selector, "de3-ae21a5a7b1fd");
      

          var reponseAsByte = resultFromService.Results[0].Result.PictureAsByteArray;
      

      这意味着 字节数组 没有以正确的方式生成,因此您的问题在GetPicturefromDB 方法或PictureAsByteArray 方法中。

      对于PictureAsByteArray,您可以尝试以下操作:

      //using System;
      //using System.IO;
      //using System.Runtime.Serialization.Formatters.Binary;
      
      private byte[] ObjectToByteArray(Object obj)
          {
              if (obj == null)
                  return null;
      
              BinaryFormatter bf = new BinaryFormatter();
              MemoryStream ms = new MemoryStream();
              bf.Serialize(ms, obj);
      
              return ms.ToArray();
          }
      

      虽然对于GetPicturefromDB,您需要确保它返回一个健康的结果,否则您需要发布代码以深入了解它。

      【讨论】:

        猜你喜欢
        • 2017-02-10
        • 2014-05-10
        • 2019-05-01
        • 1970-01-01
        • 2017-06-30
        • 2017-07-05
        • 2016-11-26
        相关资源
        最近更新 更多