我目前正在提供来自数据库表的图像,这些表都是相同的文件类型。我想要字符点“。”在路线上,但没有取得任何成功。据我了解,ISAPI处理程序可能会导致与此相关的问题。我只是不确定如何添加和排除以允许ASP.NET处理此路由。
routes.MapRoute(
name: "ImageUrl",
url: "Image/{action}/{id}.png",
defaults: new { controller = "Image" }
);
答案 0 :(得分:2)
您收到404错误,因为在IIS配置中没有映射到路径*.png
的特定托管处理程序。因此,Image/*.png
模块(StaticFile
)拦截了StaticFileModule, DefaultDocumentModule, DirectoryListingModule
路径的所有请求,并且这些模块无法找到请求的文件。
您可以通过在web.config
中配置应用程序来解决此问题。
第一个选项是将runAllManagedModulesForAllRequests="true"
属性添加到configuration/system.webServer/modules
元素。它应该是这样的:
<modules runAllManagedModulesForAllRequests="true" />
注意:但我强烈建议不要这样做。详细了解possible performance problems。
所以第二个(也就是更好)选项是注册ASP.NET ISAPI来处理对Image/*.png
路径的请求:
<system.webServer>
<handlers>
<add name="ImageMVCHandler-ISAPI-4.0_32bit" path="image/*.png" verb="GET,HEAD" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ImageMVCHandler-ISAPI-4.0_64bit" path="image/*.png" verb="GET,HEAD" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ImageMVCHandler-Integrated-4.0" path="image/*.png" verb="GET,HEAD" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>