我想将HTTP请求路由到某个操作,而不是路由到文件。
重要说明我确实使用IIS 7.0 URL重写模块的工作解决方案,但是在家中进行调试(没有IIS 7.0)我无法使用URL重写。
具体情况
我想将包含/images/
的任何网址指向~/images/
文件夹。
示例:
http://wowreforge.com/images/a.png -> /images/a.png
http://wowreforge.com/Emerald Dream/Jizi/images/a.png -> /images/a.png
http://wowreforge.com/US/Emerald Dream/Jizi/images/a.png -> /images/a.png
http://wowreforge.com/characters/view/images/a.png -> /images/a.png
问题源于页面“view_character.aspx”可以从多个URL到达:
http://wowreforge.com/?name=jizi&reaml=Emerald Dream
http://wowreforge.com/US/Emerald Dream/Jizi
上下文 IIS 7.0(集成模式),ASP.NET MVC 2.0
额外学分问题
答案 0 :(得分:3)
您可能应该将图片链接重写为。
<img src="<%= ResolveUrl("~/images/a.png") %>" />
这样您就不需要让路线处理图像了。
<强>更新强> 你将如何通过路由来做到这一点 将此条目添加到您的RouteTable
routes.Add("images", new Route("{*path}", null,
new RouteValueDictionary(new { path = ".*/images/.*"}),
new ImageRouteHandler()));
现在您需要创建一个ImageRouteHandler和一个ImageHandler
public class ImageRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//you'll need to figure out how to get the physical path
return new ImageHandler(/* get physical path */);
}
}
public class ImageHandler : IHttpHandler
{
public string PhysicalPath { get; set; }
public ImageHandler(string physicalPath)
{
PhysicalPath = physicalPath;
}
public void ProcessRequest(HttpContext context)
{
context.Response.TransmitFile(PhysicalPath);
}
public bool IsReusable
{
get { return true; }
}
}
这也不做任何缓存。您可以在Reflector中查看System.Web.StaticFileHandler,以获取处理Asp.Net应用程序静态文件的处理程序,以实现更完整的实现。