Guf*_*ffa 16 asp.net-mvc url-rewriting asp.net-mvc-routing
Action当我使用URL重写时,我从方法中获取了错误的URL .
我在web.config中有这个重写规则:
<rule name="Old Objects 2" stopProcessing="true">
<match url="^transportbilar/(nya|begagnade|miljobilar)/(.*)$" ignoreCase="true"/>
<action type="Rewrite" url="/transportbilar/{R:2}"/>
</rule>
Run Code Online (Sandbox Code Playgroud)
这将改写像一个URL /transportbilar/nya/fiat/7s76s8dg来/transportbilar/fiat/7s76s8dg,工作正常,但Url.Action获得此混淆.
我使用这样的表达式在页面中创建一个URL:
url.Action("Slideshow", "Object", new { id = objectId });
Run Code Online (Sandbox Code Playgroud)
如果未使用URL重写(直接浏览到页面),则会生成正确的URL /Object/Slideshow/7s76s8dg,但是当使用URL重写时,该Action方法会将页面URL的第一部分添加到生成的URL中,并生成错误的URL /transportbilar/Object/Slideshow/7s76s8dg.
我认为我可以在重写规则中执行重定向,这可以避免问题,因为请求的URL会发生变化,但有没有办法让它工作而不将其更改为重定向?
我认为可能相关的路线是这些(按此顺序添加):
transportbilar/handlare/{id}/{criteria}
transportbilar/handlare
transportbilar
transportbilar/sokresultat/{criteria}
transportbilar/{brand}/{id}/{criteria}
{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
最后一条路线将捕获网址/Object/Slideshow/7s76s8dg,而最后一条路线将捕获/transportbilar/fiat/7s76s8dg.
嗯..不要以为我可以帮你找到基于重写的解决方案.我猜在内部IIS/ASP.NET可能会遇到一个问题,当您尝试在路由中破解正则表达式映射时可能会遇到这种问题 - 即URL.Action无法从Controller/Action组合中确定正确的反向映射.
您可以查看以下关于您的网址的内容,以及是否可以提供有关问题的任何提示......
<%= Request.Path %>
<%= Request.RawUrl %>
<%= Request.ServerVariables["HTTP_URL"] %>
Run Code Online (Sandbox Code Playgroud)
...看看是否正在添加`/ transportbilar'.
在任何情况下,我都会认真考虑重定向旧版网址.这种方法将您当前的实际系统与遗留系统隔离开来,特别是因为您的路线收集似乎已经足够复杂了.
使用路由而不是 URL 重写,毕竟您正在使用 MVC。
查看这篇关于路由的文章:
http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |