我想知道如何维护HttpContext,因为Web的请求 - 响应性质基本上是无状态的.
是否将HttpContext对象的标识符作为__EVENTTarget/__EVENTARGUMENTS隐藏字段的一部分发送,以便HttpRuntime类可以通过从请求(HttpWorkerRequest)中读取此部分来创建HttpContext类?我不认为
请让我知道,因为我试图填补我对http管道的理解,我无法找到任何有关此信息的信息.
我理解像HttpContext.Current.Session ["myKey"] = Value;
只是工作,但如果我不得不用不同的语言(比如perl)做类似的事情,我将不得不使用相同的隐藏字段,不是吗?
谢谢-Venu
引入HttpContextWrapper和HttpContextBase,如此处所述,使HttpContext更具可模拟性/可测试性.
我正在尝试将它与S#arp架构一起使用,并遇到一些问题.
我的MVC控制器被设置为在构造函数中接受HttpContextBase参数,并且在Application_Start期间,HttpContextBase在Castle.Windor中注册,如下所示:
container.Register(Component.For<HttpContextBase>().UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但后来我意识到Castle只运行一次Factory方法,所以所有请求都获得了原始的HttpContextWrapper.真的需要为每个请求重新创建它.Castle.Windsor命令将是:
container.Register(Component.For<HttpContextBase().
LifeStyle.PerWebRequest.UsingFactoryMethod(
() => new HttpContextWrapper(HttpContext.Current)));
Run Code Online (Sandbox Code Playgroud)
...但事实证明,Castle.Windsor不允许在Application_Start中使用LifeStyle.PerWebRequest(如此处所述)
我该怎么办?有没有一个简单的方法围绕这个或我应该放弃HttpContextWrapper并注入我自己的工厂,以根据需要制作新的工厂?
Sitecore是否使用HttpContext来保存对DB的不必要的调用?
特别是对于上下文项和数据库?
谢谢
我有一个类似于此线程中描述的情况:
如何在c#中的静态方法中获取会话变量的值?
但是,这里没有静态方法(只是一个继承自IHttpHandler的类)
这是我的代码:
<%@ WebHandler Language="C#" Class="Telerik.Web.Examples.FileExplorer.FilterAndDownloadFiles.Handler" %>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Text;
using Telerik.Web.UI;
namespace Telerik.Web.Examples.FileExplorer.FilterAndDownloadFiles
{
[RadCompressionSettings(HttpCompression = CompressionType.None)] // Disable RadCompression for this page ;
public class Handler : IHttpHandler
{
#region IHttpHandler Members
private HttpContext _context;
private HttpContext Context
{
get
{
return _context;
}
set
{
_context = value;
}
}
public void ProcessRequest(HttpContext context)
{
Context = context;
string filePath = context.Request.QueryString["path"];
filePath = context.Server.MapPath(filePath);
if (filePath == …Run Code Online (Sandbox Code Playgroud) 我在mvc3应用程序中使用以下方法:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (HttpContext.Current.Session != null)
{
CultureInfo ci = (CultureInfo)this.Session["Culture"];
if (ci == null)
{
string langName = "az";
ci = new CultureInfo(langName);
this.Session["Culture"] = ci;
}
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这种方法被多次调用?
当站点在其他PC的新浏览器中打开时,找不到站点资源.
HttpContext.Current在等待调用后在异步中为null。
这是我的代码:
if (!string.IsNullOrEmpty(securityGroupName))
{
// To remove the domain name from the security group name.
string securityGroupDisplayName = securityGroupName.Split('\\')[1];
string serviceSecurityGroupId = await this.graphApiClient.GetGroupIdAsync(securityGroupDisplayName).ConfigureAwait(false);
if (!string.IsNullOrEmpty(serviceSecurityGroupId))
{
Task securityGroupRoleAddTask = this.CheckMembershipAndAddRole(serviceSecurityGroupId, userId, securityGroupName);
Task flightAdminRoleAddTask = this.CheckMembershipAndAddRole(FlightAdminSecurityGroupId, userId, FlightAdminRoleName);
Task.WaitAll(securityGroupRoleAddTask, flightAdminRoleAddTask);
}
else
{
LoggingUtilities.Logger.TraceInformation("Azure AD id does not exist for the security group: {0}.", securityGroupName);
await this.CheckMembershipAndAddRole(FlightAdminSecurityGroupId, userId, FlightAdminRoleName).ConfigureAwait(false);
}
}
else
{
LoggingUtilities.Logger.TraceInformation("Security group name is not valid, checking for flight admin role for the user: {0}.", …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 ASP.NET MVC 项目,我想延迟加载一个数据库 DataContext 对象,该对象Class在服务器请求中跨 es 使用(也就是说,它仅通过请求存在,并且对于每个请求,我都有一个独特的对象)。
HttpContext.Current目前我可以使用或获取请求HttpContext.Current.Request,但请求仅存储字符串值。
是否有类似Session对象的东西,但仅用于请求?像 ViewBag 或 ViewData 这样的东西,但可以从HttpContext对象访问?
编辑:这是我想要实现的目标:我有一个AccountBusiness类,可能会在请求中多次实例化。它具有LoggedInUser延迟加载的属性(注意:这不是 ASP.NET Identity 的 AspNetUser 对象)。通常我会做这样的事情:
private UserProfile loggedInProfile;
public UserProfile LoggedInProfile
{
get
{
if (this.loggedInProfile == null)
{
var userId = HttpContext.Current.User.Identity.GetUserId();
this.loggedInProfile = this.Context.UserProfiles.FirstOrDefault(q => q.ID == userId);
}
return this.loggedInProfile;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,正如我之前所说,这个属性可能会在一个请求中多次实例化,它会多次访问数据库以获取同一个 UserProfile 对象。这只是一个例子,我有更多与此类似的对象,并且想进行更改,以便它只访问数据库一次,然后保存它以供当前请求使用,如下所示:
public UserProfile LoggedInProfile
{
get
{
if (this.loggedInProfile == null)
{
var dataTokens = …Run Code Online (Sandbox Code Playgroud) public class UserAccount
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserAccount(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
//Sign in
public static async Task SignIn(dynamic user)
{
var claims = new[]
{
new Claim("UserID", user.ID.ToString()),
new Claim(ClaimTypes.Role, "Baller")
};
var principal = new ClaimsPrincipal(
new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme));
await _httpContextAccessor.HttpContext.Authentication.SignInAsync("Cookies", principal);
}
}
Run Code Online (Sandbox Code Playgroud)
我从SignIn方法的await语句中收到此错误: 非静态字段,方法或属性“ UserAccount._httpContextAccessor”需要对象引用
如果我未将方法声明为静态,则错误消失,但是如果方法ISN未声明为静态,则无法从我的控制器访问UserAccount.SignIn方法。
如果我这样声明变量_httpContextAccessor:
private static IHttpContextAccessor
Run Code Online (Sandbox Code Playgroud)
而不是:
private readonly IHttpContextAccessor
Run Code Online (Sandbox Code Playgroud)
所有错误都消失了,但是在await语句上又得到了空引用异常。(_httpContextAccessor未设置为对象的实例)
我正在尝试从.net framework MVC 5迁移到.net core 2.0 MVC
好的过去,我可以通过调用获取或设置缓存的对象
HttpContext.Current.Application.Lock();
HttpContext.Current.Application["foo"] = bar;
HttpContext.Current.Application.Lock();
Run Code Online (Sandbox Code Playgroud)
但是我无法将应用程序的这一部分迁移到.net核心。
如何在核心2.0上处理此问题?
我正在使用 ASP.NET Boilerplate (ASP.NET Core) 为潜在客户创建一个 CRM。
这些线索通过 API(应用服务层,而不是动态 API)推送到系统中。
我曾计划使用请求 URL (from HttpContext) 作为模型中的必填字段对潜在客户源进行快速查找。
我的问题是:在应用程序服务层中获取 post 请求的请求 URL(来源)的最佳方法是什么?
一个例子如下:
public class AboutModel : PageModel
{
public string Message { get; set; }
public void OnGet()
{
Message = HttpContext.Request.PathBase;
}
}
Run Code Online (Sandbox Code Playgroud) httpcontext ×10
c# ×7
asp.net ×3
asp.net-mvc ×3
session ×2
abp ×1
asp.net-core ×1
async-await ×1
cultureinfo ×1
ihttphandler ×1
sitecore ×1
sitecore6 ×1