c# – 在MVC4路由中使用点“.”字符

我目前正在提供来自数据库表的图像,这些表都是相同的文件类型.我想要字符点“.”在路线上,但没有取得任何成功.据我了解,ISAPI处理程序可能会导致与此相关的问题.我只是不确定如何添加和排除以允许这个路由由ASP.NET处理.

routes.MapRoute(
    name: "ImageUrl",
    url: "Image/{action}/{id}.png",
    defaults: new { controller = "Image" }
);

最佳答案 您收到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>
点赞