c# – 我可以在MVC网站下的虚拟目录中有传统的ASP.NET Web应用程序吗?

前端之家收集整理的这篇文章主要介绍了c# – 我可以在MVC网站下的虚拟目录中有传统的ASP.NET Web应用程序吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是多年来一直工作的场景.我有一个父母asp.net Web应用程序(说)www.MySite.co.uk,在它下面我有虚拟目录中的多个子(客户)站点,例如www.MySite.co.uk/Client1等所有网站(父和子虚拟目录)都是使用.NET 4.5的传统asp.net Web表单应用程序,并且一切正常.

昨天,我更新了我的父母网站,成为一个asp.net MVC 5网络应用程序(由自由职业者为我开发).我只更新了父站点,它破坏了我的所有子站点.作为一个紧急修复,我已经在我的父MVC网站中重命名了web.config文件,显然这破坏了我的父站点,但至少客户端(子)站点正在再次工作.

在Webforms站点继承的根应用程序(MVC一)中显然有一个设置,它们不喜欢它.

在我的研究中,我遇到这个:http://forums.iis.net/t/1200821.aspx?Creating+virtual+directory+for+ASP+NET+website+under+MVC+application,所以我不知道这个设置是否与我的MVC RouteConfig.cs文件有关.我的自由职业者设置它,以便旧的链接到我的aspx路径仍然可以工作(即映射到我的新视图).我还不熟悉代码,但这里是一个代码段:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "HelpRedirect",url: "Help/{*route}",defaults: new { controller = "Help",action = "ViewRedirect" }
        );

        routes.MapRoute(
           name: "AspxRoute",url: "{controller}/{action}.aspx",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "ContactRoute",url: "Contact.aspx",defaults: new { controller = "Contact",id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",url: "{controller}/{action}/{id}",id = UrlParameter.Optional }
        );
    }
}

我做了大量的搜索,但到目前为止还没有找到解决方案.所以我的问题是这样的:

>可以在MVC站点下的虚拟目录中有传统asp.net站点吗?
>如果是这样,我应该看什么设置?如何阻止子站点继承错误的设置?我有一种感觉,设置是在web.config或与上面的RouteConfig.cs有关的事情.

如果有任何人可以指出我正确的方向,我将非常感激,谢谢提前.

更新

还查看了这篇文章Virtual Directory App within a Asp.net MVC app我已经尝试在根应用程序中编辑web.config,并将< location inheritInChildApplications =“false”>围绕所有允许它的东西.但它没有起作用,客户端仍然没有工作.

更新2

我有一个自由职业者的回应,他说这是关于路由和URL,因为MVC希望某些东西在/ Client1等.所以我们需要写一个路由,发送这样的请求(路由加一个字)到一个控制器,然后需要看看这是否是MVC(例如/ help)或客户端站点(例如/ Client1)中的页面,并显示适当的页面.

就我个人而言,我自己不了解路由,但是我的自由职业者就是这样.如果他提出一个解决方案,我会发布.我仍然会欣赏任何其他输入或替代解决方案.

更新3

现在解决了!请注意,这与MVC无关,那是一个红色的鲱鱼.感谢Greg Burghardt给我指出正确的方向,他的评论“显然IIS尝试匹配一个虚拟目录,然后一个MVC控制器”.这是真的,在MVC父站点的虚拟目录中放置ASP.NET Web窗体站点没有路由问题.它是与web.config实体框架继承问题.我会发布答案.

解决方法

终于解决了!

答案是肯定的,在MVC网站父目录下的虚拟目录中传统的ASP.NET Web表单站点是非常好的.没有路由问题,因为IIS在查找MVC路由之前首先查找虚拟目录.

我已经证明是与web.config文件继承有关的问题.随着新的MVC网站,我首次引入了实体框架.所以我的web.config文件包含以下部分:

父MVC Web.config

<configSections>

  <!-- varIoUs other sections ... -->

  <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" />  

</configSections>

现在我的小孩网站表单网站已经有相同的设置了,结果是不允许更多地指定一次下一级.我知道< location inheritInChildApplications =“false”>标签,以防止继承,但经过实验,我发现这不能在< configSections>部分.我也尝试过< clear />标签在子Web.config,但这似乎不起作用< configSections>无论是.

所以,在跟着this answer出现类似的问题之后,我设法通过评论我的孩子Web.config中的各个实体框架部分来解决它,并使用异常绑定来修复版本问题(我的父站点使用版本6,但我的孩子网站使用版本5).

Child Web.config相关片段:

< configSection><&的EntityFramework GT;部分注释掉:

<configSections>
<!--<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,Version=5.0.0.0,PublicKeyToken=b77a5c561934e089" requirePermission="false" />-->

<&的EntityFramework GT;部分注释掉:

<!--<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.sqlConnectionFactory,EntityFramework" />
  </entityFramework>-->

在运行时段中绑定,始终使用版本5:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      
  <dependentAssembly>
    <!-- This is to get this Virtual Directory to use EF5 even if parent uses EF6 -->
    <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

这是一个混乱的解决方案,因为我的Child Web表单网站并不都位于MVC父站点下的虚拟目录中,因此在这种情况下,Web.config的Entity Framework部分将需要被取消注释.如果任何人知道一个更完善的解决方案,那么无论父母网站(或缺乏)是否会有效,请分享.

原文链接:https://www.f2er.com/csharp/96798.html

猜你在找的C#相关文章