Asp.net 可以使用控制器操作返回图像或url字符串吗

Asp.net 可以使用控制器操作返回图像或url字符串吗,asp.net,asp.net-mvc,image,razor,Asp.net,Asp.net Mvc,Image,Razor,我有一个需要显示的数据列表。每个项目都有一个从数据库中提取的图像字段 如果图像为空,则需要显示来自服务器的随机股票图像 我想做一些事情,比如: <img src='@Url.Action("GetImage", "MeetTheTeam", new { id = TeamMate.Id })' /> 但这不起作用,我无法调试到控制器中 这可能吗?您不能返回流或字符串Url.Action只会打印出该资源的Url,然后客户端浏览器将使用该Url获取图像。在现有图像的情况下,返

我有一个需要显示的数据列表。每个项目都有一个从数据库中提取的图像字段

如果图像为空,则需要显示来自服务器的随机股票图像

我想做一些事情,比如:

<img src='@Url.Action("GetImage", "MeetTheTeam", new { id = TeamMate.Id })' />     
但这不起作用,我无法调试到控制器中


这可能吗?

您不能返回流或字符串
Url.Action
只会打印出该资源的Url,然后客户端浏览器将使用该Url获取图像。在现有图像的情况下,返回一个图像文件流,浏览器会乐意将其渲染为图像,但在回退的情况下,返回的只是文本,浏览器也会尝试(但失败)将其解释为图像

你有两个选择:

  • 不是返回
    内容
    ,而是返回
    重定向
    ,并将URL指向传递的图像。这将导致浏览器尝试加载该URL,从而生成良好的图像流

  • 从文件系统打开回退映像,然后返回流,就像处理从数据库加载的映像一样


  • 你说它不起作用了:到底是怎么回事?结果如何?为什么你不能在控制器内调试呢?你的映像的正确类型是什么?如何在DB中存储?查找空值时可能会出错,但可能存在一个简单的空字符串。顺便说一下,您可以调试。我认为这也会导致编译时错误。我没有看到文件和ActionResult之间的隐式转换方法。数据库中的图像类型为image,可以为null。没有编译错误。当我说我不能调试时,我的意思是断点不会被击中。
    public ActionResult GetImage(int id)
        {
            var item = team.Where(teammate => teammate.Id == id).SingleOrDefault();
    
            if (item.Image != null)
            {
                return File(item.Image, "image/jpg");
            }
            else
            {                
                return Content(AppSettings.AppRoot + "content/images/MeetTheTeam/v2/gray-block" + random.Next(1, 14) + ".jpg");
            }
        }