【发布时间】:2011-08-13 15:56:01
【问题描述】:
当我使用 URL 重写时,我从 Action 方法得到一个不正确的 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>
这会将/transportbilar/nya/fiat/7s76s8dg 之类的 URL 重写为 /transportbilar/fiat/7s76s8dg,这可以正常工作,但 Url.Action 会因此而感到困惑。
我使用这样的表达式在页面中创建一个 URL:
url.Action("Slideshow", "Object", new { id = objectId });
当不使用 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}
最后一条路线将捕获 url /Object/Slideshow/7s76s8dg,倒数第二条将捕获 /transportbilar/fiat/7s76s8dg。
【问题讨论】:
-
transportbilar 是虚拟目录吗?
-
你设置了哪些路由?此外,由于您使用的是 MVC,因此您可能应该使用路由而不是 IIS 重写模块。如果您需要进行用户身份验证,您会遇到更多问题。看看learn.iis.net/page.aspx/496/…
-
@diamandiev:不,它根本不是目录,它是路线的一部分。
-
@Musaul:我已经添加了我认为可能会影响上述内容的路线。
标签: asp.net-mvc url-rewriting asp.net-mvc-routing