2010-11-19 22 views
1

(注:同様の質問を検索しようとしましたが、最も近いものは一致していないようです)URLフォワーディング+マスキングによってUrl.Content()とHtml.Actionまだ私の質問。すなわちMVC - Application root appears twice in url using Url.Content/Url.ActionASP.NET MVC 3 RC

私は現在、2つのASP.NET MVC 3 RCを持っている今、一つのドメインすなわち

mydomain.com/app1

mydomain.com/app2

の下で実行されているアプリ、それは別のアプリですので、私は別のドメイン名にサインアップしましたアプリケーションの1つに (すなわち、 http://foo.comhttp://mydomain.com/app1をロードすると、ブラウザで、それだけでhttp://foo.com、ないhttp://mydomain.com/app1が表示されます)

MVCは、いくつかの不満を持っている始まるまあ、それはです。両方ともUrl.Content()& Html.Action()は予期しないURLを生成します。私は@Html.ActionLink("About", "Index", "About")を持っている場合 たとえば、Html.Action()の場合には、私がhttp://foo.com/aboutを期待しますが、http://foo.com/app1/abouthttp://mydomain.com/app1/app1/aboutに変換するのでhttp://foo.com/APP1は/について

、明らかにリンクが動作しませんになってしまいます。私はhref="@Url.Content("~/Content/Site.css")"を持っている場合、それは場所がhttp://foo.com/APP1 /Content/Site.cssであると考えているため

同様に、Url.Contentのために、ブラウザは、スタイルシートをロードするために失敗する代わりにhttp://foo.com/Content/Site.css

方法はあります、私は読書のために(?つまりは、その生成されたURLから「/ APP1」を削除します)MVCは、その出発ディレクトリを忘れる

感謝を作ることができ、追加情報がここで必要とされている場合は私に知らせてください。

答えて

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は常に相対パスを削除するため、期待されるリンクを生成しません。完璧ではありませんが、それは私が暮らすことができる欠点です。