首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不触发镜像的.Net RouteTable

不触发镜像的.Net RouteTable
EN

Stack Overflow用户
提问于 2012-07-28 01:19:36
回答 3查看 406关注 0票数 0

我在global.asax文件中为已移动到数据库的图像设置了一个路由表。当我使用url,EmpImages/numeric id作为基本格式时,如果我使用做同样的工作的url ~/EmpImages/42,它工作得很好,但是我们有数百个硬编码的链接~/EmpImages/42.png。当我尝试使用EmpImages/numeric id.png时,处理程序从未被调用过。

我已经查看了几个显示.ext的示例,但它们使用的是页面路由而不是处理程序。使用下面的代码,你能告诉我我遗漏了什么吗?

此部分的工作方式如下:

代码语言:javascript
复制
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}", new EmployeeImageRouteHandler()));

使用URL时:

代码语言:javascript
复制
~/EmpImages/42
~/EmpImages/42/256

但当我尝试时:

代码语言:javascript
复制
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}.png", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}.png", new EmployeeImageRouteHandler()));

使用URL时:

代码语言:javascript
复制
~/EmpImages/42.png
~/EmpImages/42/256.png

它失败了。处理程序永远不会被调用。

我错过了什么简单的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-28 01:53:22

根据Route的文档,您指定路由的方式似乎不受支持。

引用文档:

请求中,URL模式由应用程序名称后面的段组成……每个段由/字符分隔。当数据段用大括号({和} )括起来时,该数据段被引用为URL参数。URL从请求中检索值并将其分配给ASP.NET参数...如果段没有用大括号括起来,则该值将被视为文字值。

显然,它不支持混合使用URL参数和文字的段。

您需要让EmployeeImageRouteHandler在内部使用字符串处理来处理size参数的".png“扩展。

编辑:除了这一点之外,似乎在使用点see this StackOverflow question处理URL时存在一个已知的问题。这里提出的解决方案包括

代码语言:javascript
复制
<httpRuntime relaxedUrlToFileSystemMapping="true" />

在您的web.config中,但这只适用于ASP4.0和IIS7.0及以上版本。在Haacked上讨论了上述问题中提到的这个问题的详细信息。

票数 1
EN

Stack Overflow用户

发布于 2012-07-28 02:37:41

据我所知,dmi_ above关于路由解析的限制是正确的。但您可以从中绘制一个简单的解决方法:

将您的路由注册为以下内容:

代码语言:javascript
复制
RouteTable.Routes.Add(new Route("EmpImages/{id}/{size}/i.png", new EmployeeImageRouteHandler()));
RouteTable.Routes.Add(new Route("EmpImages/{id}/i.png", new EmployeeImageRouteHandler()));

并请求他们:

代码语言:javascript
复制
~/EmpImages/42/i.png
~/EmpImages/42/256/i.png
票数 0
EN

Stack Overflow用户

发布于 2012-07-30 21:35:41

问题是,您尝试通过路由捕获的路径是静态资源。如果布线位置中存在文件,则忽略布线。这是为了防止静态url引用之间的冲突和防止路由引擎参与每个单独的请求而设计的。

尝试在处理程序中放置一个断点,然后指定一个您知道不存在的id,看看情况是否如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11692589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档