1

(注: 同様の質問を探してみましたが、最も近い質問はまだ私の質問と一致していないようです。つまり、MVC - アプリケーション ルートが Url.Content/Url.Action を使用して URL に 2 回表示されます)

現在、1 つのドメインで 2 つの ASP.NET MVC 3 RC アプリを実行しています。

mydomain.com/app1

mydomain.com/app2

別のアプリであるため、別のドメイン名にサインアップし、アプリの 1 つへのマスク転送を有効にしました (つまり、 http: //foo.comはhttp://mydomain.com/app1をロードし、ブラウザーで、http://mydomain.com/app1ではなく、http://foo.comのみが表示されます)

MVC が不満を持ち始めるのはここからです。Url.Content() と Html.Action() の両方が予期しない URL を生成します。たとえば、Html.Action() の場合、 がある場合、http://foo.com/about@Html.ActionLink("About", "Index", "About")を期待しますが、最終的にはhttp://foo.com/ app1 /about になります。

http://foo.com/app1/aboutはhttp://mydomain.com/app1/app1/aboutに変換されるため、明らかにリンクは機能しません。

同様に、Url.Content の場合、 がある場合href="@Url.Content("~/Content/Site.css")"、ブラウザはスタイルシートの読み込みに失敗します。これは、場所がhttp://foo.com/ app1 /Content/Site.css であると見なされ、http://fooではなく.com/Content/Site.css

MVC に開始ディレクトリを忘れさせる方法はありますか (つまり、生成された URL から" app1/ " を削除しますか?)

お読みいただきありがとうございます。ここで追加情報が必要な場合はお知らせください。

4

1 に答える 1

0

現在、回避策があります。

Url.Content()の場合、単に「〜」を削除するUrl.Content("~/...")ので、その相対パス(つまり、/ app1)を削除します。

Html.ActionLink()に関しては、相対パスが常に想定されているため、解決策が乱雑に見えるため、ここでの回避策は一時的なものです。誰かがそこにもっと良い解決策を持っていますか?

public static MvcHtmlString ActionLinkAbsolute(
                    this HtmlHelper<dynamic> htmlHelper, string linkText, string actionName, string controllerName)
                {
                    MvcHtmlString result = LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName);
                    result = new MvcHtmlString(result.ToHtmlString().Replace(VirtualPathUtility.ToAbsolute("~"), String.Empty)); 
                    return result;
                }

ここでの回避策は、その結果がないわけではありません。URLマスキングをサポートし、相対パスを無視するために、http://mydomain.com/app1は常に相対パスを削除するため、予期されるリンクを生成しません。それは完璧ではありませんが、それは私が生きることができる欠点です。

于 2010-11-19T16:51:38.197 に答える