Asp.net mvc 4 如何在ASP.NET核心应用程序中安装ASP MVC 4应用程序

Asp.net mvc 4 如何在ASP.NET核心应用程序中安装ASP MVC 4应用程序,asp.net-mvc-4,iis,asp.net-core,asp.net-core-mvc,coreclr,Asp.net Mvc 4,Iis,Asp.net Core,Asp.net Core Mvc,Coreclr,我正在尝试将旧的静态网站迁移到ASP.NET core。在我的旧网站中,有一个ASP MVC 4应用程序存在于该网站中 主要地点: MVC4应用程序: 现在,我的ASP.MVC 4应用程序位于ASP.NET核心应用程序中,如下图所示: 我需要独立管理ASP MVC 4应用程序中的所有路由。因此,主ASP.NET核心应用程序必须绕过目录/users下的所有路由,以便MVC4(users)应用程序处理这些请求 我通常按以下方式处理这些案例: routes.IgnoreRoute("/users

我正在尝试将旧的静态网站迁移到ASP.NET core。在我的旧网站中,有一个ASP MVC 4应用程序存在于该网站中

  • 主要地点:
  • MVC4应用程序:
现在,我的ASP.MVC 4应用程序位于ASP.NET核心应用程序中,如下图所示:

我需要独立管理ASP MVC 4应用程序中的所有路由。因此,主ASP.NET核心应用程序必须绕过目录
/users
下的所有路由,以便MVC4(users)应用程序处理这些请求

我通常按以下方式处理这些案例:

routes.IgnoreRoute("/users/{*pathInfo}");
但是现在看来,我不能忽略ASP.NET核心中的路由

我尝试配置,但不起作用:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseStaticFiles(new StaticFileOptions()
    {
        FileProvider = new PhysicalFileProvider(@"C:\inetpub\wwwroot\mysite.is-a-geek.com\users"),
        RequestPath = new Microsoft.AspNetCore.Http.PathString("/users")
    });
}

你知道我该如何处理这种情况吗?

ASP.NET核心站点正在新的Web服务器
Kestrel
下运行。IIS只是将所有请求重定向到localhost:5000,这就是为什么您需要在IIS下(实际上是在IIS后面)运行ASP.NET核心网站

因此,您不应该尝试配置ASP.NET Core来处理您的“/users”文件夹(太迟了)-您应该尝试配置IIS,而不将对该文件夹的请求重定向到kestrel Web服务器


另外,在一个(根)
web.config
文件中不可能配置不同的http处理程序(针对不同的子目录),因此不能在一个IIS网站中混合使用新旧ASP.NET项目。

ASP.NET核心站点在新的webserver
Kestrel
下运行。IIS只是将所有请求重定向到localhost:5000,这就是为什么您需要在IIS下(实际上是在IIS后面)运行ASP.NET核心网站

因此,您不应该尝试配置ASP.NET Core来处理您的“/users”文件夹(太迟了)-您应该尝试配置IIS,而不将对该文件夹的请求重定向到kestrel Web服务器


顺便说一句,在一个(root)
web.config
文件中不可能配置不同的http处理程序(针对不同的子目录),因此不能在一个IIS网站中混合使用新旧ASP.NET项目。

我基本上同意Dmitry的回答,但还有更多需要补充的地方。我会把它作为一个评论,但它太长了

可以将IIS配置为对不同的目录使用不同的处理程序。我不清楚ASP.NET核心是如何实现的,但从纯IIS的角度来看,您可以将请求路由到您选择的处理程序。因此,例如,在我的web.config的
部分中,我使用这两行代码将/bundle/目录中的.js和.css文件的请求路由到静态文件处理程序,从而使这些请求进入集成管道,在那里我可以通过代码访问它们:

<add name="js-files--use-integrated-pipeline" path="/bundle/*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode"/>
<add name="css-files--use-integrated-pipeline" path="/bundle/*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode"/>

相比之下,我碰巧将所有html文件路由到不同的处理程序:

<add name="html-files--use-integrated-pipeline" path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode"/>

可能还值得一提的是,即使ASP.NET Core不使用web.config作为常规配置信息,但在用于配置IIS的WebSite的根目录下仍然有一个web.config


希望这些信息能帮助您找到解决方案

我基本上同意德米特里的回答,但还有更多的补充。我会把它作为一个评论,但它太长了

可以将IIS配置为对不同的目录使用不同的处理程序。我不清楚ASP.NET核心是如何实现的,但从纯IIS的角度来看,您可以将请求路由到您选择的处理程序。因此,例如,在我的web.config的
部分中,我使用这两行代码将/bundle/目录中的.js和.css文件的请求路由到静态文件处理程序,从而使这些请求进入集成管道,在那里我可以通过代码访问它们:

<add name="js-files--use-integrated-pipeline" path="/bundle/*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode"/>
<add name="css-files--use-integrated-pipeline" path="/bundle/*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" resourceType="Unspecified" preCondition="integratedMode"/>

相比之下,我碰巧将所有html文件路由到不同的处理程序:

<add name="html-files--use-integrated-pipeline" path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode"/>

可能还值得一提的是,即使ASP.NET Core不使用web.config作为常规配置信息,但在用于配置IIS的WebSite的根目录下仍然有一个web.config

希望这些信息能帮助您找到解决方案