3

本番環境のサブドメインから静的コンテンツの提供を開始したいと思います。Visual Studioでスムーズな開発エクスペリエンスを維持しながら、これを行うための最良の方法は何ですか?この時点まで、私はURLについて心配する必要はなく、単に次のものを使用していました。

<script src="@Url.Content("~/Scripts/jquery.someScript.js")" type="text/javascript"></script>

ローカルの場合は自動的にhttp://localhost/myApp/Scr​​ipts/jquery.someScript.jsにマップされ、本番環境に移行した場合は自動的にhttp://www.myDomain.com/Scripts/jqueryにマップされます。 .someScript.js。URLを管理するために何もする必要はありません。

私の最初の本能は、web.configでいくつかのAppSettingsを使用し、HostNameとStaticHostNameを指定することですが、それではUrl.Contentの使用が中断されます。

この問題を解決するためのベストプラクティスは何ですか?

4

1 に答える 1

2

どこかで、構成設定を使用して、特定の環境で必要な動作を示す必要があります ( IsDebuggingEnabledプロパティを使用できると思いますが、カスタム構成設定の方が柔軟です)。

考えられるテクニックは 2 つあります。

オプション1

UrlHelper関連する構成設定を取得するための独自の拡張メソッドを作成できます。ビューコードは、構成の知識から隔離されます。たとえば、次のようになります。

<script src="@Url.StaticContent("~/Scripts/jquery.someScript.js")" type="text/javascript"></script>

実装例を次に示します (未テスト):

public static class UrlHelperExtensions
{
    public static string StaticContent(this UrlHelper urlHelper, string contentPath)
    {
        if (!VirtualPathUtility.IsAppRelative(contentPath))
        {
            throw new ArgumentException("Only use app relative paths");
        }

        // TODO: Further checks required - e.g. the path "~" passes the above test

        if (UseRemoteServer)
        {
            // Remove the initial "~/" from the content path
            contentPath = contentPath.Substring(2);
            return VirtualPathUtility.Combine(RemoteServer, contentPath);
        }

        return urlHelper.Content(contentPath);
    }

    private static string RemoteServer
    {
        get
        {
            // TODO: Determine based on configuration/context etc
            return null;
        }
    }

    private static bool UseRemoteServer
    {
        get
        {
            return !string.IsNullOrWhiteSpace(RemoteServer);
        }
    }
}

オプション 2

Combresのようなものを使用する代わりに、Combres の XML 構成ファイルを変換して環境ごとに構成を変更することもできます。

于 2011-11-06T23:34:34.273 に答える