使用URL重写时,Url.Action不正确

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.

mus*_*aul 5

嗯..不要以为我可以帮你找到基于重写的解决方案.我猜在内部IIS/ASP.NET可能会遇到一个问题,当您尝试在路由中破解正则表达式映射时可能会遇到这种问题 - 即URL.Action无法从Controller/Action组合中确定正确的反向映射.

您可以查看以下关于您的网址的内容,以及是否可以提供有关问题的任何提示......

<%= Request.Path %>
<%= Request.RawUrl %>
<%= Request.ServerVariables["HTTP_URL"] %>
Run Code Online (Sandbox Code Playgroud)

...看看是否正在添加`/ transportbilar'.

在任何情况下,我都会认真考虑重定向旧版网址.这种方法将您当前的实际系统与遗留系统隔离开来,特别是因为您的路线收集似乎已经足够复杂了.


Mic*_*ana 3

使用路由而不是 URL 重写,毕竟您正在使用 MVC。

查看这篇关于路由的文章:

http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx