3

我在 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 是否已被重写(真),如果是这样的话相关的路径,这反过来又没有给我绝对的 URL:

    if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext))
      return contentPath;
    string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath);
    return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath);

有谁知道为什么会这样?我对为什么会发生这种情况以及如何在我的应用程序中解释它有点困惑?

4

3 回答 3

2

好的,一旦我意识到我永远无法针对 ASP.Net MVC 使用 IIS Rewrite,我决定改用 HttpContext.RewritePath,现在一切似乎都在正常工作。

这是一个非常基本的问题,因为受影响的不仅仅是 Url.Content,还有控制器路由,我在这个特定页面上有一个表单也错误地指向 /store/ 而不是 /。

于 2012-05-15T19:55:27.847 回答
1

如果您的站点当前是并且将永远是域/子域的根(例如,您总是打算~/表示site.com/),那么请丢失~并仅将所有 url 设为/path/to/content~做了一些古怪的巫术——正如你所见。

于 2012-05-20T06:43:58.847 回答
-1

Scripts.Url 确实有助于保持您的应用程序根在位

于 2020-01-25T14:30:10.963 回答