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

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

概述这是多年来一直工作的场景.我有一个父母asp.net Web应用程序(说)www.MySite.co.uk,在它下面我有虚拟目录中的多个子(客户)站点,例如www.MySite.co.uk/Client1等所有网站(父和子虚拟目录)都是使用.NET 4.5的传统asp.net Web表单应用程序,并且一切正常. 昨天,我更新了我的父母网站,成为一个asp.net MVC 5网络应用程序(由自由职业 这是多年来一直工作的场景.我有一个父母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部分将需要被取消注释.如果任何人知道一个更完善的解决方案,那么无论父母网站(或缺乏)是否会有效,请分享.

总结

以上是内存溢出为你收集整理的c# – 我可以在MVC网站下的虚拟目录中有传统的ASP.NET Web应用程序吗?全部内容,希望文章能够帮你解决c# – 我可以在MVC网站下的虚拟目录中有传统的ASP.NET Web应用程序吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1236749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存