我可以创建一个只返回图像资源的控制器吗?

我希望在请求URL时,通过控制器传递此逻辑,例如:

www.mywebsite.com/resource/image/topbanner

控制器将查找topbanner.png并将该图像直接发送回客户端.

我见过这样的例子,您必须创建一个视图-我不想使用视图.我只想用控制器来完成这一切.

这个是可能的吗?

推荐答案

使用基本控制器文件方法.

public ActionResult Image(string id)
{
    var dir = Server.MapPath("/Images");
    var path = Path.Combine(dir, id + ".jpg"); //validate the path for security or use other means to generate the path.
    return base.File(path, "image/jpeg");
}

值得注意的是,这似乎相当有效.我做了一个测试,通过控制器(http://localhost/MyController/Image/MyImage)和直接URL(http://localhost/Images/MyImage.jpg)请求图像,结果是:

  • 每张照片MVC: 7.6毫秒
  • 每张照片Direct: 6.7毫秒

注意:这是一个请求的平均时间.平均值是通过在本地机器上发出数千个请求来计算的,因此总数不应包括网络延迟或带宽问题.

Asp.net相关问答推荐

Razor中的共享本地化资源文件

无法从部署在应用程序负载均衡器后面的 AWS ECS 上的应用程序发送 HTTP/S 请求

如何在 ASP.​NET Core 中使用 jquery

web.config 部分的单独配置文件

asp.net dropdownlist - 在 db 值之前添加空行

是否可以使用 Membership API 更改用户名

测试项目中的 App.config

c# - 如何从列表中获取值的总和?

stream.CopyTo - 文件为空.网

aspx 文件中的 if 语句

带有邮箱地址参数的 WebApi 方法从 HttpClient 返回 404

Asp.net Identity 密码哈希

存在 ios 7 虚拟键盘时,div 元素不会停留在底部

您如何在 .net WebApi2 应用程序中的 OAuth2 令牌请求中使用额外参数

ASP.NET 元:资源键

哪个控件导致了回发?

根据条件更改 GridView 行 colored颜色

如何判断字符串的第一个字符是否是字母,C#中的任何字母

如何创建代表 colored颜色 的随机十六进制字符串?

在没有等待 #2 的情况下调用异步方法