如何解决对WebResource.axd和ScriptResource.axd

时间:2018-07-06 10:29:30

标签: asp.net azure webforms webresource.axd scriptresource.axd

背景

因此,我们拥有一个Web应用程序套件(FWIW,它们是Webforms),我们希望最终将其从专用的盒子迁移到Azure。

这些WebApp的现有层次结构类似于以下内容:

http://example.com/folder1/App1/StartPage.aspx
http://example.com/folder1/App2/StartPage.aspx
http://example.com/folder1/AppX/StartPage.aspx

http://example.com/folder2/App1/StartPage.aspx
http://example.com/folder2/App2/StartPage.aspx
http://example.com/folder2/AppX/StartPage.aspx

动人的动感

我们已经开始尝试Azure“应用服务”,因为在我们的案例中这些服务看起来类似于WebApp。

我们创建了一个名为“ NewAzureApp”的新AppService,并将我们的应用程序代码上传到了该服务。快速ping命令表明可以从以下位置访问它 'http://NewAzureApp.azurewebsites.net/'

在我们专用的框(运行带有IIS的Windows Server)上,我们创建了新的' folder3 '和' App1 '文件夹(分别声明它们是一个应用程序)和使用重写网址工具来定位我们新的实验性AzureApp

web.config(在“ folder3 / App1 ”中)包含如下部分:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://NewAzureApp.azurewebsites.net/{R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

这使我可以通过网址“ http://NewAzureApp.azurewebsites.net”来部署“ http://example.com/folder3/App1/

但是有一些问题。

问题

从本质上讲,该应用程序似乎不再了解它正在子文件夹中运行。这是可以理解的,因为实际上不是。

这会导致以下问题:

当我通过“ folder2”版本查看App1时,源代码呈现如下内容:

<script src="/folder2/App1/WebResource.axd?d=SomeLongString;t=Somenumber" type="text/javascript"></script>

据我所知,这就是浏览器看到的内容,因此可以到达计算出的网址...

http://example.com/folder2/App1/WebResource.axd?d=SomeLongString;t=Somenumber

...然后浏览器将其访问,以从存储在框架本身中的某种资源dll内部提取一些javascript。非常聪明,可以正常工作。

当我通过“ folder3”版本查看新的“ App1”时,源代码将呈现为没有文件夹结构。即像这样:

<script src="/WebResource.axd?d=SomeLongString;t=Somenumber" type="text/javascript"></script>

此代码发送回浏览器,浏览器将此代码与我的域结合在一起以生成...

http://example.com/WebResource.axd?d=SomeLongString;t=Somenumber

自然,在我网站的此级别上没有任何处理程序或模块可用于处理此请求。因此,一些通常可以正常运行的内置设备将失败。

理想情况下,我会发出一些指令,或者安排一些配置,这些指令可能会覆盖此位置自动检测。到目前为止,我什么都没发现。

仅供参考,同样的困扰似乎会影响类似ScriptResource.axd引用的呈现。

一种替代方法

当我找不到位置更改解决方案时,我试图更改我的实际应用程序的位置。

我的理论是我无法说服我的应用程序渲染“ / folder3 / App1 /”,因为就天青而言,它不在“ / folder3 / App1”中。 因此,如果我确实将其放置在文件夹中,则它将正确呈现,并且可以重定向到该设备,一切都会好起来。

我尝试了以下操作:

  • 在我的azure应用程序中访问“应用程序设置”-“虚拟应用程序和目录”。
  • 观察现有的文件夹映射。
    • '/'映射到'site \ wwwroot'
  • 更改文件夹映射。
    • '/ folder3 / App1 /'映射到'site \ wwwroot' **由于没有有效的父母,因此无法保存。
  • 更改文件夹映射。

    • '/'映射到'site \ SomeDummyFolder'
    • '/ folder3 /'映射到'site \ SomeDummyFolder'
    • '/ folder3 / App1 /'映射到'site \ wwwroot' **保存这些设置很好。

    • 访问专用框并从以下位置更改了重写指令:

.. to ..

<action type="Rewrite" url="http://NewAzureApp.azurewebsites.net/folder3/App1/{R:1}" />

...看起来确实应该起作用。

我尝试访问http://example.com/folder3/App1/StartPage.aspx,并收到消息“由于发生内部服务器错误而无法显示该页面。”

这是我的主意:(

摘要

我真的很想知道...

1.>为什么会收到此错误? ->“由于发生内部服务器错误,因此无法显示该页面。”

...还有可能更重要的是...

2.>是否有[更好的方法/任何方法]解决Webresource.axd和ScriptResource.axd解决问题。

在此先感谢您提供的任何有用信息

注意:我们在几个页面上使用ScriptManager,以允许使用UpdatePanels等。这些ScriptManager非常有用。它们自己没有声明任何脚本引用。我不确定如果ScriptManagers或其他某种机制负责WebResource.axd和ScriptResource引用的呈现,但是为了完整性起见,在这里我将其提及。)

0 个答案:

没有答案