ASP.Net - Как разрешить просматривать импортированные файлы сценариев не прошедшими проверку пользователями при использовании проверки подлинности с помощью форм? - PullRequest
0 голосов
/ 18 ноября 2009

Я использую ASP.Net и формы проверки подлинности. Когда пользователь перенаправляется на страницу входа, я получаю ошибку JavaScript:

Сообщение: ошибка синтаксиса Строка: 3 знака: 1 Код: 0 URI: http://localhost:49791/login.aspx?ReturnUrl=%2fWebImageButton.js

Это потому, что я использую пользовательскую кнопку изображения в отдельном элементе управления веб-проекта, который добавляет ScriptReference на страницу:

public class WebImageButton : LinkButton, IScriptControl, IButtonControl
{
    protected override void OnPreRender(EventArgs e)
    {

        // Link the script up with the script manager
        ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterScriptControl(this);
            scriptManager.Scripts.Add(new ScriptReference("<snip>.WebImageButton.js", "<snip>"));
        }

        base.OnPreRender(e);

    }
}

Если я добавлю следующее правило в мой файл Web.Config, файл будет успешно импортирован:

<location path="WebImageButton.js">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

Это не очень хорошо, так как у меня есть несколько пользовательских элементов управления, которые делают то же самое, и мне не особенно нравится аутентифицировать каждый из их js-файлов по отдельности.

Нет ли способа объявить, что все импортированные ссылки на скрипты должны быть разрешены? Я попытался авторизовать файл WebResource.axd, если это разрешено, но сама страница (при отображении) физически ссылается на файл WebImageButton.js.

Идеальный сценарий будет выглядеть примерно так:

  <location path="My.WebControlLibraryProject.Controls">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

Есть ли способ добиться этого без перечисления каждого файла? <Ч /> EDIT: Просто чтобы прояснить, эти файлы сценариев находятся в другом проекте и отсутствуют в моем реальном веб-проекте. Я знаю, как объявлять пути расположения путей к каталогам для включения большого количества файлов в один пакет, но я не могу понять, как аутентифицировать автоматические ссылки на сценарии из встроенных ресурсов.

Ответы [ 3 ]

0 голосов
/ 18 ноября 2009

Вы можете указать общее местоположение и поместить все свои сценарии туда, чтобы все сценарии, которые не требуют авторизации, прошли. Вам просто нужно изменить путь к папке, в которой вы хотите, и поместить туда скрипты.

Это будет работать не только для скриптов, но и для других ресурсов, таких как изображения, таблицы стилей и т. Д.

0 голосов
/ 18 ноября 2009

Является ли WebImageButton.js встроенным ресурсом? Как я видел, вы реализовали IScriptControl. Таким образом, вы должны вернуть все ссылки на скрипты в IScriptControl.GetScriptReferences. Я думаю, что встроенный ресурс никогда не будет авторизован. Я использую некоторые из пользовательских элементов управления в другой ситуации и не имею никаких проблем. Мне интересно, что менеджер скриптов ссылается на WebImageButton.js напрямую, а не в виде файла .axd. Итак, я думаю, что проблема возникает из вашего файла ресурсов.

public class WebImageButton : LinkButton, IScriptControl, IButtonControl
{

    protected ScriptManager ScriptManager
    {
        get
        {
            ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
            if (scriptManager == null)
            {
                throw new System.Web.HttpException("<snip>");
            }
            return scriptManager;
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        base.Render(writer);

        this.ScriptManager.RegisterScriptControl<WebImageButton>(this);
    }

    #region IScriptControl Members

    public System.Collections.Generic.IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    {
        yield break;
    }

    public System.Collections.Generic.IEnumerable<ScriptReference> GetScriptReferences()
    {
        yield return new ScriptReference("<snip>.WebImageButton.js", "Assembly Name");
    }

    #endregion

}
0 голосов
/ 18 ноября 2009

Это всего лишь предположение - вы пытались вставить подстановочный знак в путь местоположения? Возможно, что-то вроде ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...