问题
We have a web application with 2 web.config files. I'm using the telerik:RadScriptManager control within an ASP.NET page. There is web resource file (WebResource.axd) that this control needs access to for it's ScriptReferences. I think this .axd file contains the JavaScript files for Telerik's controls. All of our Rad Controls are implemented in a separate web application (.csproj) project called "admin". The root web application project (.csproj) has a folder called "admin" where all of the admin project files live, including the admin web.config. The page I'm having an issue with here also lives in the admin project. I think it's trying to access the .axd file in the root folder, not the "/admin" folder. (another error at the bottom of my question after I change the path of my HTTP Handler). How can I make the application read the WebResource.axd file in ~/admin/Telerik.Web.UI.WebResource.axd and not ~/Telerik.Web.UI.WebResource.axd? I'm guessing those 3 JavaScript errors are resulting because of this resource issue because when I navigate explicitly to the resource in the admin folder URL, I can see the ASP.NET AJAX Control Toolkit JavaScript code.
Source Code:
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
<%--<Scripts>
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
</Scripts>--%>
</telerik:RadScriptManager>
Code within the root application web.config:
<location path="Telerik.Web.UI.WebResource.axd">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Here are the website (root) application project web.config HTTP Handlers:
<httpHandlers>
<add path="/services/social.axd" verb="GET,POST" type="Acu.Cms.Modules.Social.PeopleHandler, Acu.Cms.Modules.Social"/>
<add verb="*" path="AcuLanapCaptcha.axd" type="Lanap.BotDetect.AcuCaptchaHandler, Lanap.BotDetect"/>
<add verb="*" path="LanapCaptcha.aspx" type="Lanap.BotDetect.CaptchaHandler, Lanap.BotDetect"/>
<add path="*.cmsx" verb="*" type="Acu.Cms.Web.HttpCmsRequestHandler, Acu.Cms"/>
<add path="image.acux" verb="GET" type="Acu.Web.Imaging.WebImageHandler, Acu.Web.Imaging"/>
<add path="media.acux" verb="GET" type="Acu.Cms.Web.CmsWebMediaHandler, Acu.Cms"/>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true" />
</httpHandlers>
Here are the admin (virtual directory) application project web.config HTTP Handlers:
<httpHandlers>
<remove path="LanapCaptcha.aspx" verb="*" />
<remove path="AcuLanapCaptcha.aspx" verb="*" />
<remove verb="*" path="*.asmx" />
<add path="Authenticator.ashx" verb="GET,POST" type="Acu.Cms.Website.Admin.Authenticator, Acu.Cms.Website.Admin" />
<add verb="*" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" validate="false" />
<add verb="*" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.Upload.RadUploadProgressHandler, Telerik.Web.UI" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" validate="false" />
<!--ScriptResourceHandler.axd is the resource handler URL used to serve all of the javascript files found in the Microsoft AJAX Library-->
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<add path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" validate="false" />
<add path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" validate="false" />
<add path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" validate="false" />
<add verb="*" validate="false" path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler, Telerik.Web.UI" />
</httpHandlers>
JavaScript Error #1:
ASP.NET Ajax client-side framework failed to load.
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
JavaScript Error #2:
Sys is not defined
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('RadScriptManager1', document.getElementById('editorform'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tctl00SU'], [], [], 90);
//]]>
</script>
JavaScript Error #3:
RadEditorCommandList is not defined
RadEditorCommandList['Edit Link'] = function(commandName, editor, oTool)
{
_editor = editor;
_point = editor.CreateRestorePoint();
var selection = editor.GetSelection();
var pe = selection.GetParentElement();
var id = '';
if (pe && pe.tagName.toLowerCase() == 'a' && pe.attributes['cms:asset_id']) {
id = pe.attributes['cms:asset_id'].value;
}
window.top.InlineLinkEditor.selection = selection.GetText();
window.top.InlineLinkEditor.show('elementid=' + $('__elementId').value + '&xrefid=' + id + '&html=' + encodeURIComponent(selection.GetHtmlText()), editLink, null);
};
============
Troubleshooting some more...
I've tried changing the path of my admin project web.config WebResource HTTP Handler to "/admin/..." but then I get the new error below.
<add verb="*" path="/admin/Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" validate="false" />
New Error:
Server Error in '/' Application.
'~/Telerik.Web.UI.WebResource.axd' is missing in web.config. RadScriptManager requires a HttpHandler registration in web.config. Please, use the control Smart Tag to add the handler automatically, or see the help for more information: Controls > RadScriptManager
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: '~/Telerik.Web.UI.WebResource.axd' is missing in web.config. RadScriptManager requires a HttpHandler registration in web.config. Please, use the control Smart Tag to add the handler automatically, or see the help for more information: Controls > RadScriptManager
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[InvalidOperationException: '~/Telerik.Web.UI.WebResource.axd' is missing in web.config. RadScriptManager requires a HttpHandler registration in web.config. Please, use the control Smart Tag to add the handler automatically, or see the help for more information: Controls > RadScriptManager]
Telerik.Web.UI.RadScriptManager.OnPreRender(EventArgs e) +169
System.Web.UI.Control.PreRenderRecursiveInternal() +80
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
Version Information: Microsoft .NET Framework Version:2.0.50727.3623; ASP.NET Version:2.0.50727.3618
Tried to get some information from this article:
http://weblogs.asp.net/asptest/archive/2008/10/06/asp-net-ajax-and-http-handlers-a-cautionary-tale.aspx
Also tried using this to solve the issue.. it helped guide me a little, but was incomplete for my particular issue:
http://www.telerik.com/help/aspnet-ajax/introduction-troubleshooting.html
回答1:
Turns out that ASP.NET looks at the HTTP Handlers in the root web.config first, and then looks at the HTTP Handlers in the virtual directory web.config file. So when it hit the line I marked as "Culprit" below, it never reached the line in the virtual directory web.config file. So I just added another line above the "Culprit" HTTP Handler.
Root website folder web.config HTTP Handlers:
<httpHandlers>
<add path="/services/social.axd" verb="GET,POST" type="Acu.Cms.Modules.Social.PeopleHandler, Acu.Cms.Modules.Social"/>
<add verb="*" path="AcuLanapCaptcha.axd" type="Lanap.BotDetect.AcuCaptchaHandler, Lanap.BotDetect"/>
<add verb="*" path="LanapCaptcha.aspx" type="Lanap.BotDetect.CaptchaHandler, Lanap.BotDetect"/>
<add path="*.cmsx" verb="*" type="Acu.Cms.Web.HttpCmsRequestHandler, Acu.Cms"/>
<add path="image.acux" verb="GET" type="Acu.Web.Imaging.WebImageHandler, Acu.Web.Imaging"/>
<add path="media.acux" verb="GET" type="Acu.Cms.Web.CmsWebMediaHandler, Acu.Cms"/>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<!-- FIXED WITH THIS LINE --><add verb="*" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" validate="false" />
<!-- CULPRIT ............ --><add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true" />
</httpHandlers>
Also added this to the virtual directory web.config:
<handlers>
... removed other handlers
<add name="Telerik.Web.UI.WebResource"
path="Telerik.Web.UI.WebResource.axd"
type="Telerik.Web.UI.WebResource, Telerik.Web.UI"
verb="*" />
</handlers>
... the other alternative is to add "admin/*" to the beginning of the path web.config attributes. If that handler is used in the RadEditor or other control, you must reference it correctly.
来源:https://stackoverflow.com/questions/7491924/http-handler-cannot-find-axd-file-in-nested-web-application-folder-telerik-rads