【发布时间】:2014-06-07 13:15:50
【问题描述】:
我有一个 ASP.NET MVC 3 项目,我安装了 ImageResizer Mvc Web.Config 包,它添加了所有必要的组件,并为我修改了我的 Web.Config 文件。
我的 MVC 视图中有以下代码:
<div id="heroimage" class="slideshow">
<div>[LEFT]</div
<div>[RIGHT]</div>
<div>[INDICATOR]</div>
@foreach (ICMSElement oHeroImage in Model.Elements("HeroImage")){
<img src="images/@oHeroImage.Value" />
}
</div>
<div id="image-strip" class="viewer">
<div class="slider">
<ul>
@foreach (ICMSElement oHeroImage in Model.Elements("HeroImage")){
<li><img src="images/@oHeroImage.Value?width=100&height=100"></li>
}
</ul>
</div>
</div>
第二个 div 中包含的图像未调整大小。没有用于覆盖调整大小的宽度和高度的 css。
在 ImageResizer 的故障排除页面中,指出如果无法调整图像大小,可能是以下原因之一:
您没有在 Web.config 文件的两个位置正确注册 HttpModule。
(我使用了为我修改 Web.Config 的 NuGet 包)
您正在使用 IIS 6(或更早版本)或 IIS7 Classic Pipeline,并且未使用 .jpg.ashx 语法,并且您尚未将所有请求都映射到 ASP.NET 运行时。
(我的 IIS 服务器在集成模式下运行 IIS 7)
您正在使用 ASP.NET MVC(并且有冲突的路由),但没有安装 MvcRoutingShim 插件。
(MvcRoutingShim插件根据调试页面安装)
您输入错误的查询字符串命令。
(我在上面的代码sn-p中没有这样做)
原始图像小于您请求的尺寸,并且您没有使用 &scale=both(默认行为是从不放大图像,但这可以更改)
(本例中默认图片尺寸为1280x800)
我的 Resizer.Debug 输出在这里:https://gist.github.com/Thoth2020/11197160
我的网站在布局页面中使用了基本标签,但是它没有调整 img 的 src 属性。例如,我正在查看的页面呈现了这个 img 标签:
<img src="images/00100010_1200_800_slideshow_03.jpg?width=100&height=100">
这与上面解释 Razor 语法的 sn-p 相同。
所以,我想我不知道为什么它不能正常工作。
【问题讨论】:
-
听起来像其他模块或处理程序在 ImageResizer 可以处理它们之前拦截请求。您是否尝试过 .ashx 语法以查看是否失败?即“images/00100010_1200_800_slideshow_03.jpg.ashx?width=100&height=100”
-
如果我所做的只是在查询字符串之前将 .ashx 添加到图像中,我确实会看到损坏的图像,当我转到“在新选项卡中打开图像”时,我会看到 IIS 异常。现在,除了将 .ashx 后缀添加到 img src 标签之外,我应该做些什么吗?我正在查看 ImageResizer 支持部分。无论如何,我得到的异常看起来像是该站点的现有控制器之一正试图抓住这一点,然后异常退出。
-
我将标签
添加到 Web.Config 的调整大小部分,但我仍然收到错误,所以我不知道这是否会有所帮助我。无论如何,我在这里将 IIS 错误消息放在一个要点中:gist.github.com/Thoth2020/11223241 我想弄清楚是现有代码抓住了它(那个 AssetController)还是那个 MvcHandler。我想问题是,有没有办法让 ImageResizer 先获取这个请求? -
只是一个更新,我发现了 MVC 应用程序中试图抓取图像的部分。它所做的(或尝试做的,它例外,因为它在磁盘上找不到以 .ashx 结尾的文件)是在看到图像时返回 FilePathResult。我猜当它得到它的那一刻,ImageResizer 永远没有机会看到它。你知道我有什么方法可以强制 ImageResizer 处理请求吗?
-
或者,是否可以将代码放入正在抓取请求的控制器中,以便将其路由到 ImageResizer?
标签: imageresizer