Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 415我的控制器中存在不支持的媒体类型问题[C]_C#_Asp.net Mvc_Model View Controller_Controller - Fatal编程技术网

C# 415我的控制器中存在不支持的媒体类型问题[C]

C# 415我的控制器中存在不支持的媒体类型问题[C],c#,asp.net-mvc,model-view-controller,controller,C#,Asp.net Mvc,Model View Controller,Controller,我创建了一个端点,这样谷歌就可以访问一些数据库图片。这就是我的端点的样子 [HttpGet] [Route("MiniPicture")] [Produces("image/png")] public async Task<IActionResult> GetPictureAsync(Selector selector) { var resultFromService

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

      [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());
      }
我用我的Google Action和Postman尝试了这一点,我出现了以下错误:


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

基于我对HTTP状态415的发现

HTTP 415不支持的媒体类型客户端错误响应代码 指示服务器拒绝接受请求,因为 有效负载格式为不受支持的格式

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


还有,为什么选择?我希望该参数中有一个数字数据类型,因为您给它提供了一个ID:)

,所以根据我找到的关于HTTP状态415的信息

HTTP 415不支持的媒体类型客户端错误响应代码 指示服务器拒绝接受请求,因为 有效负载格式为不受支持的格式

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


还有,为什么选择?我希望该参数中有一个数字数据类型,因为您给它输入了一个ID:)

这是一个基于控制器代码准备的示例,它工作得非常好:

[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);
}

这意味着字节数组的生成方式不正确,因此在
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
,您需要确保它返回一个正常的结果,否则您需要发布代码以深入查看它。

这是一个基于控制器代码编写的示例,它可以完美地工作:

[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);
}

这意味着字节数组的生成方式不正确,因此在
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
,您需要确保它返回一个正常的结果,否则您需要发布代码以深入查看它

    var reponseAsByte = resultFromService.Results[0].Result.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();
    }