在发送响应之前预处理 png 图像
Preprocess png images before sending response
假设我们有 MVC 应用程序和图像位于:/Images/image1.png
并且我们有匹配此特定路线的操作
[Route("Content/{filename}")]
public ActionResult GetImage(string filename)
{
// Process image (add watermark etc..)
}
目标是在将 png 文件发送到浏览器之前对其进行处理。
当我们尝试访问此操作时出现问题:
/Content/image1.png
它 returns 404 因为 .png 扩展名作为静态内容处理,所以它认为我正在尝试从该位置加载图像。另一方面,如果我们在文件名后添加一个斜杠:/Content/image1.png/ 它确实可以正常工作
问题是我们如何让 iis 忽略 png 并将其作为路由而不是静态内容处理
我在 web.config 试过这个,但运气不好:
<system.webServer>
<staticContent>
<remove fileExtension=".png" />
</staticContent>
</system.webServer>
好的。找到了解决方案。您需要添加
<handlers>
<add name="PngFileHandler" path="*.png" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
找到here
假设我们有 MVC 应用程序和图像位于:/Images/image1.png
并且我们有匹配此特定路线的操作
[Route("Content/{filename}")]
public ActionResult GetImage(string filename)
{
// Process image (add watermark etc..)
}
目标是在将 png 文件发送到浏览器之前对其进行处理。
当我们尝试访问此操作时出现问题:
/Content/image1.png
它 returns 404 因为 .png 扩展名作为静态内容处理,所以它认为我正在尝试从该位置加载图像。另一方面,如果我们在文件名后添加一个斜杠:/Content/image1.png/ 它确实可以正常工作
问题是我们如何让 iis 忽略 png 并将其作为路由而不是静态内容处理
我在 web.config 试过这个,但运气不好:
<system.webServer>
<staticContent>
<remove fileExtension=".png" />
</staticContent>
</system.webServer>
好的。找到了解决方案。您需要添加
<handlers>
<add name="PngFileHandler" path="*.png" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
找到here