我有一个在 .NET 4.7.2 上运行的可用 Web 应用程序,我需要将其迁移到 .NET 6.0。在更改 .NET Core 管理 Http 库和网络的方式时,我遇到了许多问题。
特别是我无法翻译如下代码:
protected bool AuthorizeCore(HttpContext httpContext)
{
if (Config.Instance.Test)
return true;
var context = httpContext.ApplicationInstance.Context;
var roles = httpContext.Request?.ServerVariables["HTTP_COMPANY_ROLES"];
return IsAuthenticate(roles);
}
特别是,在前面的代码片段中,我无法实现如何从
ApplicationInstance
获取 HttpContext
以及如何从当前 http 请求访问 ServerVariables
数组,因为这些属性未定义(错误 CS1061)在我当前的项目参考和程序集参考中。
任何人都可以给我关于如何解决这些问题的建议吗?
另一个问题是:在 .NET Core 中,
HttContext
和 HttContextBase
之间存在差异,我应该考虑到吗?
提前致谢。
ASP.NET Core 中没有 HttpContextBase。 HttpContext 已经是一个抽象类,在 DefaultHttpContext 中实现(参见 GitHub)。
HttpRequest 没有 ServerVariables 属性。您可以使用
HttpContext.Request?.Headers
来获取这些 Properties。
您可以使用 session 来获取或设置用于管理此请求的用户会话数据的对象:
HttpContext.Session.SetString("HTTP_COMPANY_ROLES", "aa");
var v1=HttpContext.Session.GetString("HTTP_COMPANY_ROLES");
此外,您可以阅读在 ASP.NET Core 中访问 HttpContext 了解更多信息。