加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

iis-7 – 捆绑不适用于映射的虚拟目录

发布时间:2020-12-16 09:52:48 所属栏目:asp.Net 来源:网络整理
导读:我们有一个网站,其中CSS和 JavaScript分别捆绑到/ Content /和/ Scripts /目录中.这两者也是单独域中虚拟目录的映射目标,用于静态资源(因此不提供cookie). 问题是在我们的生产环境中,汇编 – debug设置为false(因此启用了捆绑和缩小),相对URL工作正常并从捆
我们有一个网站,其中CSS和 JavaScript分别捆绑到/ Content /和/ Scripts /目录中.这两者也是单独域中虚拟目录的映射目标,用于静态资源(因此不提供cookie).

问题是在我们的生产环境中,汇编 – > debug设置为false(因此启用了捆绑和缩小),相对URL工作正常并从捆绑系统提供服务,但静态域URL(使用指向同一位置的虚拟目录)会产生HTTP 404错误.

有没有办法配置IIS以允许捆绑适用于此虚拟目录的内容?我有必要为静态域创建一个单独的虚拟MVC项目,以便它识别捆绑,但是想看看是否有更好的解决方案.

这是IIS的当前处理顺序似乎是:

>接收(捆绑)资源的传入请求,例如[静态域名] /Content/all.css
>运行任何HTTP处理程序,例如捆绑如果可用(在这种情况下没有静态域)
>按照虚拟目录并提供资源(如果可用),即搜索([main domain] /Content/all.css)

由于此文件实际上不存在于文件系统上,因此会引发HTTP 404.理想情况下,步骤2应在步骤3之后运行.

非常感谢.

解决方法

我做了一些实验并设法解决它.什么不起作用是将静态站点的根指向主网站的同一根,因为web.config文件是共享的 – 对静态站点所做的任何更改(即禁用会话状态)也应用于主站点网站.

最后,有效的是:

>让静态域指向文件系统上的单独根文件夹.
>将虚拟目录保留在静态站点(/ Content /和/ Scripts /)上,指向主站点上的相应位置.
>由于我们使用Helicon的URL重写器进行缓存清除,因此使用与主站点中使用的规则相同的规则创建一个简单的.htaccess文件.把它放在静态站点的根目录中.
>将global.asax文件从主网站复制到静态网站的根目录.这不可能是捷径.
>将/ bin /文件夹的内容从主站点复制到静态站点.

> IIS中指向主网站上的/ bin /文件夹的虚拟目录将不起作用.
>将文件系统中的快捷方式创建到主网站上的/ bin /文件夹也不起作用.

>在IIS中,确保静态站点使用自己的应用程序池,并为.NET 4.0,集成管道模式配置它.这样MVC 4捆绑将起作用.
>添加UrlRoutingModule创建一个简单的web.config.

这是静态站点的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <customErrors mode="Off">
        </customErrors>
        <sessionState mode="Off" />
        <pages enableSessionState="false" enableViewState="false" enableViewStateMac="false" renderAllHiddenFieldsAtTopOfForm="false" />
    </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="ScriptModule" />
            <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,System.Web.Routing,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35" />
        </modules>
        <urlCompression doStaticCompression="true" doDynamicCompression="true" />
        <security>
            <requestFiltering allowDoubleEscaping="True" />
        </security>
        <tracing>
            <traceFailedRequests>
                <add path="*">
                    <traceAreas>
                        <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
                    </traceAreas>
                    <failureDefinitions timeTaken="00:00:00" statusCodes="200" />
                </add>
            </traceFailedRequests>
        </tracing>
        <!-- Cache static content for a month,only enable on UAT or Live -->
        <staticContent>
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/>
        </staticContent>
    </system.webServer>
</configuration>

主要思想是捆绑需要在静态站点上启用并运行ASP.NET MVC4,因为在考虑虚拟目录之前,IIS会对捆绑进行评估(并且似乎没有办法解决此问题).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读