如何在ASP.NET核心应用程序

时间:2016-05-26 15:37:33

标签: asp.net-mvc-4 iis asp.net-core asp.net-core-mvc coreclr

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

现在我的ASP.MVC 4应用程序存在于ASP.NET核心应用程序中,如下图所示:

enter image description here

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

我通常按如下方式处理这些案件:

routes.IgnoreRoute("/users/{*pathInfo}");

但现在,似乎我无法忽略ASP.NET Core中的路由

我尝试配置static files,但它无效:

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")
    });
}

你知道我怎么能处理这种情况?

2 个答案:

答案 0 :(得分:1)

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

因此,您不应该尝试配置ASP.NET Core来处理您的" / users"文件夹(它也是#34;迟到") - 你应该尝试配置IIS不要将对该文件夹的请求重定向到kestrel webserver。

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

答案 1 :(得分:1)

我大多同意德米特里的回应,但还有更多要补充。我已经把它作为评论,但它太长了。

可以将IIS配置为对不同目录使用不同的处理程序。我不清楚如何使用ASP.NET Core,但从纯IIS的角度来看,您可以将请求路由到您选择的处理程序。例如,在<system.webServer> <handlers>部分的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来获取常规配置信息,webite的根目录仍然有一个web.config用于配置IIS。

希望这些信息可能对您制定解决方案有所帮助。