HttpContext.Current.Items 是一个具有 HTTP 请求生命周期的存储。
我想知道与此等效的 Classic ASP。
我决定学习节点的最佳方法是在节点中重新构建我现有的一个c#/ webforms应用程序.
这是一个相当学习的曲线,我注意到我在c#中HttpContext.Current经常使用的一件事是访问类Session和Request.Url类或静态方法.
节点中有没有这样的东西我错过了?
我已将节点应用程序拆分为可重复使用的"类"(伪代码)
/api/
- user-manager.js
- getAllUsers()
Run Code Online (Sandbox Code Playgroud)
然后在我的一个控制器中
var userManager = require('user-manager');
var users = userManager.getAllUsers();
Run Code Online (Sandbox Code Playgroud)
现在,如果我想访问sessionManager或userManager中的url,我必须做这样的事情:
var users = userManager.getAllUsers(req, res);
Run Code Online (Sandbox Code Playgroud)
这不是一个大问题,但我只是好奇,如果有另一种方式,或者如果我构建我的应用程序完全错误,那么了解其他人如何做事情会很有见.
我正在编写一个自定义的 .Net 应用程序,该应用程序利用 Claims 来确保安全性,因为我们跨越了许多边界 - Web、API、批处理等等。在开发过程中,有时我会在通过 Chrome 登录时在系统中创建一些东西,然后我将通过 Edge 中的不同帐户测试新创建的项目,并以某种方式HttpContext.Current.User.Identity对应于我的 Chrome 会话。我确实Thread.CurrentPrincipal在幕后设置,但我的理解一直是所有进入 IIS 的请求都会产生一个新线程,所以我无法弄清楚为什么 Edge 请求被处理为好像它们是 Chrome 请求一样。
是否有可能因为 Visual Studio 处于调试模式而共享此信息?
嗨,我想在 ASP.NET Core 中模拟 IHttpConnectionFeature
在我的控制器中,我有:
var connectionId = HttpContext.Features.Get<IHttpConnectionFeature>().ConnectionId;
Run Code Online (Sandbox Code Playgroud)
但是我如何在我的单元测试中模拟它:
var controller = new MyController(logger.Object,
mockService.Object)
{
ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext()
}
};
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
消息 = "未将对象引用设置为对象的实例。"
假设我有一个带有路由模板的控制器/users/{userId}/profilePhoto
假设一个用户访问/users/123/profilePhoto,另一个用户访问/users/444/profilePhoto。
有什么方法可以找到/users/{userId}/profilePhoto用于解决该请求的路由模板 ( ) 吗?例如,是否可以从 中读取它HttpContext?
我有一个 Web 表单项目,我正在尝试将其转换为 ASP.NET Core。我的问题是,在网络表单中,我将一个对象保存到会话中,当我获取它时,我可以对其进行更改并保留它们。另一方面,在核心中,我通过序列化对象将其设置为会话。当我获取它并进行更改时,它不会影响会话中存储的对象。有没有办法按原样保存对象(无需序列化它),以便当我从会话中获取它并对其进行更改时,可以继续使用它而不必再次在会话中设置它?
会议是
System.Web.HttpContext.Current.Session["object"]
Run Code Online (Sandbox Code Playgroud)
并做到了
AppHttpContext.Current.Session.GetString("object")
Run Code Online (Sandbox Code Playgroud)
然后我将它反序列化为我想要的对象。
Ps:我使用 AppHttpContext 在控制器外部获取会话
我已经阅读了有关配置IHttpContextAccessor为services.AddSingleton范围的内容,但我也阅读了它正在“本地异步”工作,并且我也知道 ASP.Net 中异步的复杂工作,我的意思是例如,如果控制器操作方法是async,并且它await用于async调用,然后它可能会继续另一个线程,但神奇的是一些线程绑定的东西与维护(如HttpContext)
我的具体用例:我必须MyConverter向我的 EF Core注入一个类,该类DbContext在OnModelCreating. 然而,这个模型由 缓存DbContext,所以任何后续请求,即使它会有一个全新的实例,DbContext也会使用这个非常相同的模型,所以非常相同的MyConverter实例。(即使它已经配置services.AddTransient)。它MyConverter有一个构造函数和一个注入IHttpContextAccessor,因此基于非常相似的原因,它实际上也是所有DbContext/MyConverter用法的单例。
题
HttpContextAccessor在第一个请求中创建的这个特定实例将为 Web 应用程序生命周期中的所有后续请求提供服务。它会正常工作吗?这里有任何(并发)陷阱吗?
(我是否正确地认为我们使用单个或多个实例并不重要HttpContextAccessor,因为它的获取实现HttpContext将使用正确的方式,包括异步本地线程切换陷阱等以正确的方式返回HttpContext?)
我正在研究全局异常中间件的实现,我想用单元测试来覆盖中间件。下面你看看我走了多远。
这是单元测试的代码。
[Fact]
public async Task MethodName_StateUnderTest_ExpectedBehavior()
{
//Arrange
IExceptionHandlerFeature exceptionHandlerFeature = new ExceptionHandlerFeature {Error = new NotFoundException()};
IFeatureCollection features = new FeatureCollection();
features.Set(exceptionHandlerFeature);
var context = new DefaultHttpContext(features);
context.Response.Body = new MemoryStream();
//Act
await ExceptionMiddleware.HandleException(context);
//Assert
context.Response.StatusCode.Should().Be((int) HttpStatusCode.NotFound);
}
Run Code Online (Sandbox Code Playgroud)
这是 ExceptionMiddleware.Handle 方法的代码
public static async Task HandleException(HttpContext context)
{
var contextFeature = context.Features.Get<IExceptionHandlerFeature>();
if (contextFeature == null)
{
return;
}
if (contextFeature.Error is AppValidationException validationException)
{
context.Response.StatusCode = (int) HttpStatusCode.BadRequest;
var failures = JsonConvert.SerializeObject(validationException.Failures);
await context.Response.WriteAsync(
new ErrorDetails
{ …Run Code Online (Sandbox Code Playgroud) unit-testing middleware httpcontext exceptionhandler .net-core
我只是想知道是否有可能获得and Controller?!为了能够根据请求的操作验证用户的角色,需要它。ActionAuthorizationHandler
我能够得到参考HttpContext。但似乎HttpContext.Request.RouteValues难以接近。
有人有什么想法吗?我的代码:
public class RoleHandler :
AuthorizationHandler<RoleRequirement>
{
private readonly IUnitOfWork _context;
private readonly IHttpContextAccessor _httpContext;
public RoleHandler(IHttpContextAccessor httpContext, IUnitOfWork context)
{
_context = context;
_httpContext = httpContext;
}
protected override Task HandleRequirementAsync(
AuthorizationHandlerContext authorizationcontext,
RoleRequirement requirement)
{
var roleClaim = authorizationcontext.User.Claims
.Where(c =>
c.Type == ClaimTypes.Role);
var routeData = authorizationcontext.Resource ;
if (ThisRoleIsAllowed(roleClaim, requirement.ActionName).Result)
authorizationcontext.Succeed(requirement);
return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud) 我使用以下代码进行页面设置:http://www.jigar.net/articles/viewhtmlcontent78.aspx,以便从我的HTTPS页面发布到远程HTTPS页面.据我所知,这篇文章是明确发送的.
我误会了吗?如果没有,我该如何保护帖子?
httpcontext ×10
c# ×6
asp.net-core ×3
.net-core ×2
asp.net ×2
unit-testing ×2
asp-classic ×1
asp.net-mvc ×1
express ×1
http ×1
identity ×1
middleware ×1
node.js ×1
request ×1
routes ×1
session ×1
ssl ×1