.net core .Net Core-通过api发送图像=解释为文档但使用MIME类型图像/jpeg传输的资源

.net core .Net Core-通过api发送图像=解释为文档但使用MIME类型图像/jpeg传输的资源,.net-core,asp.net-core-webapi,mime,.net Core,Asp.net Core Webapi,Mime,在.Net Core MVC应用程序的wwwroot文件夹中,我有一些图像。我需要将这些图片提供给TopDesk,在那里我可以插入一个嵌入的url。我对Topdesk没有影响。我只能改变服务形象的方式 当我使用到图像的直接链接时,它就起作用了。图像被嵌入 直接url的示例: https://my.web.site/images/image001.jpeg 但是有一个有限的嵌入大小(600px),所以我需要调整图像的大小。为此,我编写了一个非常简单的api控制器: [HttpGet] [Rout

在.Net Core MVC应用程序的wwwroot文件夹中,我有一些图像。我需要将这些图片提供给TopDesk,在那里我可以插入一个嵌入的url。我对Topdesk没有影响。我只能改变服务形象的方式

当我使用到图像的直接链接时,它就起作用了。图像被嵌入

直接url的示例:

https://my.web.site/images/image001.jpeg
但是有一个有限的嵌入大小(600px),所以我需要调整图像的大小。为此,我编写了一个非常简单的api控制器:

[HttpGet]
[Route("api/Images/GetImage/{id}")]
public IActionResult GetImage(string id)
{
    try
    {
      var pad = $"c:\\Images\\{id}";
      if(System.IO.File.Exists(path))
      {
          var fileBytes = System.IO.File.ReadAllBytes(path);
          var smallImage = ..... doing resizing;
          new FileExtensionContentTypeProvider().TryGetContentType(Path.GetFileName(path), out var contentType);
          return File(smallImage , contentType ?? "application/octet-stream", $"{id}");
      }
      return NotFound();
    }
    catch(Exception ex)
    {
        return BadRequest(ex.Message);
    }
}
但是url

https://my.web.site/api/images/GetImage/image001.jpeg
导致

解释为文档但使用MIME类型传输的资源 图像/jpeg

图像没有显示。 当我在Postman中测试url时,它会毫无警告地返回图像。
这里缺少什么?

请尝试使用
FileContentResult
而不是返回
文件:

[HttpGet]
[Route("api/Images/GetImage/{id}")]
public IActionResult GetImage(string id)
{
  try
  {
    var path = $"c:\\Images\\{id}";
    if(System.IO.File.Exists(path))
    {
      var fileBytes = System.IO.File.ReadAllBytes(path);
      var smallImage = ..... doing resizing;
      new FileExtensionContentTypeProvider().TryGetContentType(Path.GetFileName(path), out var contentType);
      return new FileContentResult(fileBytes, contentType ?? "application/octet-stream");
    }
  return NotFound();
  }
  catch(Exception ex)
  {
    return BadRequest(ex.Message);
  }
}
当使用浏览器导航到
/GetImage/{id}
时,您将看到使用
文件
浏览器倾向于下载文件,但使用
文件内容结果
它直接在浏览器选项卡中显示图像,这与使用静态文件的行为相同。这可能是因为在使用
File
/
FileContentResult
时添加了响应头(可能是头)。但不确定TopDesk是如何使用这些图像的

离题:最好不要在每个请求中实例化
文件扩展ContentTypeProvider
。相反,您可以在Startup.cs中将其注册为singleton,如:

services.AddSingleton(new FileExtensionContentTypeProvider());

并将其注入控制器的构造函数。

回答得很好。将文件更改为FileContentResult非常有效。此外,我还计划更改FileExtensionContentTypeProvider,原因如下。我知道我不是最好的方式,但还是必须改变它。第一件事优先;-)@肯哈斯很高兴这有帮助:)