0 votes

ASP.Net - Comment puis-je permettre aux fichiers script importés d'être vus par des utilisateurs non authentifiés lors de l'utilisation de l'authentification des formulaires ?

J'utilise ASP.Net et l'authentification par formulaire. Lorsqu'un utilisateur est dirigé vers la page de connexion, j'obtiens une erreur JavaScript :

Message : Erreur de syntaxe Li Code : [ ] http://localhost:49791/login.aspx?ReturnUrl=%2fWebImageButton.js

En effet, j'utilise un bouton d'image personnalisé dans un contrôle de projet de contrôle Web distinct qui ajoute une référence de script à la page :

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);

    }
}

Si j'ajoute la règle suivante dans mon Web.Config, le fichier est importé avec succès :

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

Ce n'est pas très bon car j'ai un certain nombre de contrôles personnalisés qui font la même chose, et je n'ai pas particulièrement envie d'authentifier chacun de leurs fichiers js individuellement.

N'y a-t-il aucun moyen de déclarer que toutes les références script importées doivent être autorisées ? J'ai essayé d'autoriser le fichier WebResource.axd au cas où il le permettrait, mais la page elle-même (lorsqu'elle est rendue) fait physiquement référence au fichier WebImageButton.js.

Le scénario idéal serait le suivant :

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

Existe-t-il un moyen d'y parvenir sans énumérer chaque fichier ?


EDIT : Pour être clair, ces fichiers script se trouvent dans un autre projet et non dans mon projet web actuel. Je sais comment déclarer les chemins d'accès aux répertoires pour inclure un grand nombre de fichiers en une seule fois, mais je n'arrive pas à trouver comment authentifier les références automatiques script, qui proviennent de ressources intégrées.

0voto

Matt Hamsmith Points 2285

Ce n'est qu'une supposition - avez-vous essayé de mettre un joker dans le chemin d'accès à l'emplacement ? Peut-être quelque chose comme < location path="*.js"> ?

0voto

Joseph Points 18099

Vous pouvez spécifier un emplacement générique et y placer tous vos scripts afin que tous les scripts qui ne requièrent pas d'autorisation passent. Il vous suffit de changer le chemin d'accès pour le dossier de votre choix et d'y placer les scripts.

Cela fonctionnera non seulement pour les scripts, mais aussi pour d'autres ressources, telles que les images, les feuilles de style, etc.

0voto

Mehdi Golchin Points 5578

Est-ce que le WebImageButton.js une ressource intégrée ? Comme je l'ai vu, vous aviez mis en place IScriptControl . Vous devez donc renvoyer toutes les références script sur l'élément IScriptControl.GetScriptReferences . Je pense qu'une ressource intégrée n'est jamais autorisée. J'utilise certains contrôles personnalisés dans différentes situations et je n'ai aucun problème. Je me demande si le gestionnaire de script fait des références à WebImageButton.js directement, et non sous la forme d'un fichier .axd. Je pense donc que le problème vient de votre fichier de ressources.

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X