Обработчику HTTP не удается найти файл axd во вложенной папке веб-приложения: Telerik RadScriptManager не может найти файл WebResource.axd в папке ~ / admin / - PullRequest
3 голосов
/ 21 сентября 2011

У нас есть веб-приложение с 2 файлами web.config. Я использую элемент управления telerik: RadScriptManager на странице ASP.NET. Существует файл веб-ресурса (WebResource.axd), к которому этот элемент управления должен иметь доступ для своих ScriptReferences. Я думаю, что этот файл .axd содержит файлы JavaScript для элементов управления Telerik. Все наши Rad Controls реализованы в отдельном проекте веб-приложения (.csproj) под названием «admin». Корневой проект веб-приложения (.csproj) имеет папку с именем «admin», в которой находятся все файлы проекта admin, включая admin web.config. Страница, с которой у меня возникла проблема, также находится в проекте администратора. Я думаю, что он пытается получить доступ к файлу .axd в корневой папке, а не в папке "/ admin". (еще одна ошибка в нижней части моего вопроса после изменения пути моего HTTP-обработчика). Как я могу заставить приложение читать файл WebResource.axd в ~ / admin / Telerik.Web.UI.WebResource.axd, а не ~ / Telerik.Web.UI.WebResource.axd? Я предполагаю эти 3 ошибки JavaScript возникают из-за этой проблемы с ресурсом, поскольку при явном переходе к ресурсу в URL-адресе папки администратора я вижу код JavaScript ASP.NET AJAX Control Toolkit.

Исходный код:

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

Код в корневом приложении web.config:

<location path="Telerik.Web.UI.WebResource.axd">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>

Вот веб-сайт (корневое) приложение проекта web.config HTTP Обработчики:

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

Вот проект приложения администратора (виртуального каталога) HTTP-обработчики web.config:

  <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 # 1:

Не удалось загрузить клиентскую среду ASP.NET Ajax.

<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 # 2:

Sys не определен

<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('RadScriptManager1', document.getElementById('editorform'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tctl00SU'], [], [], 90);
//]]>
</script> 

Ошибка JavaScript # 3:

RadEditorCommandList не определен

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

============

Устранение неполадок еще ...

Я пытался изменить путь моего администратора проекта Web.config HTTP-обработчик WebResource на "/ admin / ...", но затем я получаю новую ошибку ниже.

<add verb="*" path="/admin/Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" validate="false" />

Новая ошибка:

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 

Пытался получить некоторую информацию из этой статьи:

http://weblogs.asp.net/asptest/archive/2008/10/06/asp-net-ajax-and-http-handlers-a-cautionary-tale.aspx

Также попытался использовать это, чтобы решить проблему .. это помогло мне немного, но было неполным для моей конкретной проблемы:

http://www.telerik.com/help/aspnet-ajax/introduction-troubleshooting.html

1 Ответ

2 голосов
/ 21 сентября 2011

Оказывается, что ASP.NET сначала просматривает обработчики HTTP в корневом каталоге web.config, а затем просматривает обработчики HTTP в файле web.config виртуального каталога. Поэтому, когда он попал в строку, которую я пометил как «Culprit» ниже, он никогда не достиг строки в файле web.config виртуального каталога. Поэтому я просто добавил еще одну строку над обработчиком HTTP "Culprit".

Корневая папка веб-сайта web.config HTTP-обработчики:

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

Также добавлено это в виртуальный каталог web.config:

    <handlers>

... удалены другие обработчики

        <add name="Telerik.Web.UI.WebResource"
             path="Telerik.Web.UI.WebResource.axd" 
             type="Telerik.Web.UI.WebResource, Telerik.Web.UI"
             verb="*"  />

    </handlers>

... другой альтернативой является добавление «admin / *» в начало атрибутов пути web.config. Если этот обработчик используется в RadEditor или другом элементе управления, вы должны правильно сослаться на него.

...