我试图从特定的URL系统服务映像文件,就像这样:
mysite的/图片/分类/ File_Name.extension
我已经成立了一个路线,像这样:
routes.MapRoute( "ImagesRoute", // Route name
"Images/{category}/{file}.jpg", // URL with parameters
new { controller = "Posts",
action = "ViewImage",
category = "", file = "" } // Parameter defaults
);
这是应该映射到我的控制器操作:
public ActionResult ViewImage(string category, string file)
{
var dir = Server.MapPath("/Images");
var imgtitle = file.Replace("_", " ").Replace(".jpg", "");
var repos = new BlogImagesRepository();
var guid = repos.FetchImageByCategoryAndTitle(category, imgtitle);
var path = Path.Combine(dir, category, guid.ImageGuid.ToString());
return File(path, "image/jpeg");
}
如果我删除从路由jpg扩展,并要求文件标题,而不对URL的jpg扩展(即:图像/ MyCategory / My_Image)它显示就好了。 然而,添加的jpg扩展导致404 error--
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
我认为它看起来不是控制器行动的文件。
添加.JPG的路线并没有解决这个; 我不知该怎么办,我的谷歌的运气一直没有非常高,我看见这里类似的问题。
我怎样才能做到这一点为.jpg和类似的图像类型? 我必须建立一个忽略莫名其妙特定的路径? 如果是这样,我怎么去这样做? 该应用程序只是被通过VS 2012目前跑了。
你说得对,用于.JPG请求不被通过发送到您的控制器和IIS的静态文件处理程序处理。 你不是真的想要一个忽略,但你想通过给它传递给ASP.NET运行时。 大部分的互联网搜索,你会发现会告诉你要添加的RunAllManagedModulesForAllRequests或东西的尊重; 然而,这对性能的影响,所以要做到这一点最简单的方法可能是添加其他TransferRequestHandler在你的web配置,如下面的MyJpgHandler例如:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="MyJpgHandler" path="Images/*/*.jpg" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
</handlers>
</system.webServer>
这将导致行为你希望(假设你不也有定规是要担任从相同的URL路径的静态内容的任何.jpg文件)