ASP.Net-在使用表单身份验证时,如何允许未经身份验证的用户查看导入的脚本文件?
我正在使用ASP.Net和表单身份验证。当用户被定向到登录页面时,我收到一个JavaScript错误: 消息:语法错误行:3字符:1 代码:0 URI: 这是因为我在一个单独的Web控件项目控件中使用了一个自定义图像按钮,该控件将脚本引用添加到页面:ASP.Net-在使用表单身份验证时,如何允许未经身份验证的用户查看导入的脚本文件?,asp.net,javascript,forms-authentication,Asp.net,Javascript,Forms Authentication,我正在使用ASP.Net和表单身份验证。当用户被定向到登录页面时,我收到一个JavaScript错误: 消息:语法错误行:3字符:1 代码:0 URI: 这是因为我在一个单独的Web控件项目控件中使用了一个自定义图像按钮,该控件将脚本引用添加到页面: public class WebImageButton : LinkButton, IScriptControl, IButtonControl { protected override void OnPreRender(EventArg
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);
}
}
公共类WebImageButton:LinkButton、IScriptControl、IButtonControl
{
受保护的覆盖无效OnPreRender(EventArgs e)
{
//将脚本与脚本管理器链接起来
ScriptManager ScriptManager=ScriptManager.GetCurrent(this.Page);
if(scriptManager!=null)
{
scriptManager.RegisterScriptControl(此);
scriptManager.Scripts.Add(新脚本引用(“.WebImageButton.js”,”);
}
基于预渲染(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>
是否有任何方法可以在不列出每个文件的情况下实现这一点?
编辑:需要澄清的是,这些脚本文件位于另一个项目中,不在我的实际web项目中。我知道如何声明目录路径的位置路径以在一个wack中包含大量文件,但我不知道如何验证来自嵌入式资源的自动脚本引用。这只是猜测-您是否尝试在位置路径中添加通配符?也许类似于
这不仅适用于脚本,也适用于其他资源,如图像、样式表等。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
}
公共类WebImageButton:LinkButton、IScriptControl、IButtonControl
{
受保护的ScriptManager ScriptManager
{
得到
{
ScriptManager ScriptManager=ScriptManager.GetCurrent(此.Page);
if(scriptManager==null)
{
抛出新的System.Web.HttpException(“”);
}
返回脚本管理器;
}
}
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
base.Render(writer);
this.ScriptManager.RegisterScriptControl(this);
}
#区域IScriptControl成员
public System.Collections.Generic.IEnumerable GetScriptDescriptors()
{
屈服断裂;
}
public System.Collections.Generic.IEnumerable GetScriptReferences()
{
返回新的ScriptReference(“.WebImageButton.js”,“程序集名称”);
}
#端区
}
Nah,您不能将大多数特殊符号放入位置路径。不可能。我的所有脚本都与我的项目分开。正如我在问题中所说,它们都在我的一个单独的web控件项目中。这就是为什么我在库中控件的PreRender事件上导入它们,如我的示例所示。