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 アプリには、/ ではなく /store/ をルートとして解決する @Url.Content("~/") エントリがいくつかあります。たとえば、典型的な 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);

なぜこれになるのか誰にも分かりますか?なぜこれが起こっているのか、アプリケーションでどのように説明できるのかについて少し混乱していますか?

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 に答える