System.Web可以与ASP.Net Core一起使用,具有完整框架

问题描述:

我们基于不同的.Net版本运行多个站点。System.Web可以与ASP.Net Core一起使用,具有完整框架

其中一个站点是运行.NET 4.6和ASP.Net MVC 5.XX

要使用剃刀新语法,我们要升级该站点使用的.Net 4.6和ASP.Net核心

我们在我们的网站上使用FormsAuthentication,我们将继续使用它,以便用户可以在网站之间移动。 (其中一个站点是运行FormsAuthentication的SharePoint网站)

我们知道ASP.Net Core并未使用System.Web中的任何内容,但我们需要使用控制器(在登录期间创建FormsAuthentication cookie)以及HttpModule验证cookie。

我一直没能找到任何例如如何使用的System.Web运行ASP.Net核心具有完全framwork网站。我无法在project.json中为system.web添加依赖项。

问题。

  1. 是否有可能从这样的设置使用system.web?

  2. 我们如何添加依赖关系的System.Web所以System.Web.FormsAuthentication可从ASP.NET MVC 6(控制器/ HTTP模块)

+1

为什么不直接在.Net内核中进行表单身份验证? – DavidG

+1

.Net Core不支持表单身份验证。这是我们无法转移到.Net Core的原因之一,因为我们使用FormsAuthentication运行所有其他网站。 (当前还有其他依赖项与.Net内核不兼容) – TheTechArch

+0

使用System.Web dll与使用System.Web不同。没有一个System.Web管道可以运行你的ASP.NET Core应用程序,所以你不能做你想做的事情。 – davidfowl

使用的System.Web DLL是不一样的使用System.Web程序。没有一个System.Web管道可以运行你的ASP.NET Core应用程序,所以你不能做你想做的事情。

+0

谢谢大卫。那是我害怕的。 我需要开始寻找关于如何用兼容的东西替换SharePoint中的formsauthentication的选项。 – TheTechArch

+0

很多System.Web的相似之处都在Microsoft.AspNetCore中。 – JoshYates1980

这可能不工作,你的思考方式。当您使用.Net Core MVC对付完整框架时,确实存在System.Web命名空间,并且可以在技术上调用该命名空间,但它不会像您想要的那样工作。原因是Asp.Net Core和System.Web的请求管道是完全不同的。因此,例如,如果从请求进入时检查HttpContext对象,那么使用Asp.Net Core MVC时,它将填充所需的所有信息,但如果使用System.Web对象检查当前请求,则会看到它们目前没有要求。这是因为当前请求没有通过System.Web管道进入。如果你愿意,它通过.Net核心“管道”进入。因此,如果您使用.Net Core MVC,您需要坚持使用该框架的工具和方法,而不是System.Web中提供的工具和方法。

但是,应该可以引用System.Web.dll,如果你的确实是想要的。如果您使用的是VS2015,则需要获取System.Web.Dll的副本并将其包装在nuget包中以建立对它的引用。看到这里.net core 1.0 visual studio referencing external dll VS2017RC有alpha工具,应该不需要将它包装在NuGet包中,但是我在安装到我的机器时遇到了麻烦,所以我不能个人担保。

+0

我们明确地发送Cookies到FormsAuthentication,所以这不是一个真正的问题。(如果不是FormsAuthenticaiton里面期望的东西从请求)从HttpModule验证cookie的示例 FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value) – TheTechArch

+0

我听到雅,如果您可以从FormsAuthentication API中使用足够低的原始方法从4。 x不能访问HttpContext或它的子对象的_any_,那么你可能会得到它的工作。但是,如果大多数人都希望在生产中支持,那么这是一个很大的问题。 –

+0

我们至少想尝试看看是否可能。我非常喜欢新的干净Razor语法。 (我们正在构建其他与.Net核心无关的网站)但是首先我们需要一种方法来创建system.web的依赖关系,这可以从运行完整框架的应用程序访问。如果即使这不可能,它也是FormsAuthentication的炫目者,然后我们可能需要考虑将其余站点的身份验证转换为可以跨越的新功能。 – TheTechArch