我在IIS 7中有以下规则:
<rule name="Category" enabled="true">
<match url="^store/([0-9]+)/(.*)" />
<action type="Rewrite" url="store?cid={R:1}" appendQueryString="false" logRewrittenUrl="true" />
</rule>
这似乎工作正常,但是在我的ASP.Net MVC 3应用程序中,我有几个@ Url.Content(“〜/”)条目,它们解析为/ store /作为根目录(而不是/)。例如,典型的URL是http://mysite.com/store/99/coats-with-hoods。
编辑/更新:我仍然在努力学习这一点,所以我决定研究Url.Content代码库,我注意到它检查URL是否已被重写(true),如果可以,它将相关路径,而不是给我绝对URL:
if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext))
return contentPath;
string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath);
return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath);
有人知道为什么会这样吗?我对为什么会发生这种情况以及如何在应用程序中进行说明感到困惑。
最佳答案
好的,一旦我意识到我永远无法对ASP.Net MVC使用IIS Rewrite,我决定改用HttpContext.RewritePath,现在一切似乎都可以正常工作了。
这是一个非常基本的问题,不仅是Url.Content受到了影响,它也是 Controller 的路由,我在此特定页面上有一个表单也错误地指向了/ store /而不是/。
关于asp.net-mvc - IIS 7重写规则和Url.Content问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10482299/