我在global.asax文件中为已移动到数据库的图像设置了一个路由表。当我使用url,EmpImages/numeric id作为基本格式时,如果我使用做同样的工作的url ~/EmpImages/42,它工作得很好,但是我们有数百个硬编码的链接~/EmpImages/42.png。当我尝试使用EmpImages/numeric id.png时,处理程序从未被调用过。
我已经查看了几个显示.ext的示例,但它们使用的是页面路由而不是处理程序。使用下面的代码,你能告诉我我遗漏了什么吗?
此部分的工作方式如下:
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}", new EmployeeImageRouteHandler()));使用URL时:
~/EmpImages/42
~/EmpImages/42/256但当我尝试时:
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}.png", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}.png", new EmployeeImageRouteHandler()));使用URL时:
~/EmpImages/42.png
~/EmpImages/42/256.png它失败了。处理程序永远不会被调用。
我错过了什么简单的东西?
发布于 2012-07-28 01:53:22
根据Route的文档,您指定路由的方式似乎不受支持。
引用文档:
在
请求中,URL模式由应用程序名称后面的段组成……每个段由/字符分隔。当数据段用大括号({和} )括起来时,该数据段被引用为URL参数。URL从请求中检索值并将其分配给ASP.NET参数...如果段没有用大括号括起来,则该值将被视为文字值。
显然,它不支持混合使用URL参数和文字的段。
您需要让EmployeeImageRouteHandler在内部使用字符串处理来处理size参数的".png“扩展。
编辑:除了这一点之外,似乎在使用点see this StackOverflow question处理URL时存在一个已知的问题。这里提出的解决方案包括
<httpRuntime relaxedUrlToFileSystemMapping="true" />在您的web.config中,但这只适用于ASP4.0和IIS7.0及以上版本。在Haacked上讨论了上述问题中提到的这个问题的详细信息。
发布于 2012-07-28 02:37:41
据我所知,dmi_ above关于路由解析的限制是正确的。但您可以从中绘制一个简单的解决方法:
将您的路由注册为以下内容:
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}/i.png", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}/i.png", new EmployeeImageRouteHandler()));并请求他们:
~/EmpImages/42/i.png
~/EmpImages/42/256/i.png发布于 2012-07-30 21:35:41
问题是,您尝试通过路由捕获的路径是静态资源。如果布线位置中存在文件,则忽略布线。这是为了防止静态url引用之间的冲突和防止路由引擎参与每个单独的请求而设计的。
尝试在处理程序中放置一个断点,然后指定一个您知道不存在的id,看看情况是否如此。
https://stackoverflow.com/questions/11692589
复制相似问题