ASP.NET Framework 与 ASP.NET Core 之间的技术差异

本文档概述了在开始迁移之前应了解的 ASP.NET Framework 和 ASP.NET Core 之间的重要技术差异。

URI 解码差异

ASP.NET Core 以不同的方式处理 URI 编码:

字符 编码 ASP.NET Core ASP.NET 框架
\ %5C \ /
/ %2F %2F /

建议:使用 new Uri(this.AspNetCoreHttpRequest.GetEncodedUrl()) 进行正确的 URL 处理。

用户机密迁移

用户机密需要特殊处理。 有关当前指南 ,请参阅 GitHub 问题 #27611

CultureInfo.CurrentCulture 差异

注释

ASP.NET Core 不会为 ASP.NET Framework 等请求自动设置 CultureInfo.CurrentCulture 。 必须显式配置本地化中间件。

在 ASP.NET Framework 中,CurrentCulture 已为请求配置,但在 ASP.NET Core 中不会自动执行此操作。 你必须将相应的中间件添加到你的管道中。

建议:有关如何启用此功能的详细信息 ,请参阅 ASP.NET 核心本地化

使用与 ASP.NET Framework 类似的行为启用此功能的最简单方法是将以下内容添加到管道:

app.UseRequestLocalization();

线程处理注意事项

注释

这利用 System.Web 适配器 来简化迁移。

ASP.NET Core 不能保证请求的线程关联。 如果代码需要线程关联,则必须确保正确同步或使用 SingleThreadedRequest 属性:

[SingleThreadedRequest]
public class LegacyController : Controller
{
    public IActionResult Index()
    {
        // Some code that requires to be run on a single thread
        return View();
    }
}