Как управлять подачей статического контента с субдомена во время разработки - PullRequest
3 голосов
/ 07 ноября 2011

Я хочу начать подачу статического контента с субдомена в производство. Каков наилучший способ сделать это, поддерживая плавную разработку в Visual Studio? До этого момента мне не приходилось беспокоиться об URL-адресах, и я просто использовал:

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

Когда я был локальным, он автоматически отображался на http://localhost/myApp/Scripts/jquery.someScript.js, а когда я переходил на работу, он автоматически отображался на http://www.myDomain.com/Scripts/jquery.someScript.js. Мне не нужно было ничего делать для управления URL-адресами.

Моим первым инстинктом было бы использовать некоторые AppSettings в моем web.config и указать HostName и StaticHostName, но это нарушило бы мое использование Url.Content.

Каковы некоторые лучшие методы решения этой проблемы?

1 Ответ

2 голосов
/ 07 ноября 2011

Где-то вам нужно будет использовать параметр конфигурации, чтобы указать, какое поведение вам требуется в данной среде (я полагаю, вы можете использовать свойство IsDebuggingEnabled , но пользовательский параметр конфигурации является более гибким).

Я могу придумать два возможных метода.

Опция 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 , но изменение конфигурации для среды путем преобразования XML-файла конфигурации Combres.

...