标签: httpcontext

如何从不是页面的类访问GetGlobalResourceObject函数?

我在asp.net proj中有一个类,我想从站点的任何地方访问GetGlobalResourceObject(那个页面公开),可能吗?

换句话说,我想从一个不是我不关心的页面的类中访问全局资源.

asp.net resources httpcontext

10
推荐指数
2
解决办法
3万
查看次数

ASP.NET中的Per-Request静态数据

我想要为每个请求缓存用户所处的角色.在任何给定页面中有几个地方我们有类似的地方:

<% if(Roles.IsUserInRole("RoleName")) {%>
    <!-- Conditional Rendering -->
<% } else if(Roles.IsUserInRole("AnotherRole") {%>
    <!-- You get the point -->
<% } %>
Run Code Online (Sandbox Code Playgroud)

由于这都存储在sql数据库中,因此每个请求都会访问数据库.我知道有办法在cookie中缓存角色,但我不想这样做.无论如何,我在想的是这样的.

public static class SecurityUtils
    {
        public static string[] UserRoles()
        {
            var context = HttpContext.Current;

            if (context == null) return Enumerable.Empty<string>();

            string[] roles;

            roles = context.Items["UserRoles"] as string[];

            if (roles == null)
            {
                roles = Roles.GetRolesForUser();
                context.Items["UserRoles"] = roles;
            }

            return roles;
        }
    }
Run Code Online (Sandbox Code Playgroud)

有人看到任何问题吗?我知道有人会打电话来UserRoles()查找上下文中的项目,也许这不是最有效的事情.我真正想知道的是,这是否会基于每个请求缓存它,因此与其他用户请求没有重叠.

.net c# asp.net httpcontext thread-safety

10
推荐指数
1
解决办法
6394
查看次数

这是获取HttpContext请求主体的安全方法吗?

public static class HttpRequestHelper
{
    public static string RequestBody()
    {
        var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
        bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
        var bodyText = bodyStream.ReadToEnd();
        return bodyText;
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算从ActionFilters中调用它来记录传入的请求.当然可能有多个同时发出的请求.

这种方法可以吗?

c# asp.net-mvc httpcontext http-headers asp.net-web-api

10
推荐指数
1
解决办法
2万
查看次数

测试使用HttpContext.Current.Request.Files的Web API方法?

我正在尝试编写一个Web API方法的测试,该方法使用HttpContext.Current.Request.Files并经过详尽的搜索和实验后,我无法弄清楚如何模拟它.正在测试的方法如下所示:

[HttpPost]
public HttpResponseMessage Post()
{
    var requestFiles = HttpContext.Current.Request.Files;
    var file = requestFiles.Get(0);
    //do some other stuff...
}
Run Code Online (Sandbox Code Playgroud)

我意识到还有其他 类似的问题,但它们没有解决这个具体情况.

如果我试图模拟上下文,我会遇到Http*对象层次结构的问题.假设我设置了各种模拟对象(使用Moq),如下所示:

var mockFiles = new Mock<HttpFileCollectionBase>();
mockFiles.Setup(s => s.Count).Returns(1);
var mockFile = new Mock<HttpPostedFileBase>();
mockFile.Setup(s => s.InputStream).Returns(new MemoryStream());
mockFiles.Setup(s => s.Get(It.IsAny<int>())).Returns(mockFile.Object);
var mockRequest = new Mock<HttpRequestBase>();
mockRequest.Setup(s => s.Files).Returns(mockFiles.Object);
var mockContext = new Mock<HttpContextBase>();
mockContext.Setup(s => s.Request).Returns(mockRequest.Object);
Run Code Online (Sandbox Code Playgroud)

试图将其分配给当前上下文...

HttpContext.Current = mockContext.Object;
Run Code Online (Sandbox Code Playgroud)

...导致编译器错误/红线,因为它Cannot convert source type 'System.Web.HttpContextBase' to target …

c# unit-testing moq httpcontext asp.net-web-api

10
推荐指数
1
解决办法
2万
查看次数

如何在ASP.NET MVC3中单元测试ValueProviderFactories?

我们希望将我们的项目从ASP.NET MVC 2升级到3.我们的大多数测试都成功了,但有些测试失败了ValueProviderFactories.Factories.GetValueProvider(context).

这是一个简单的测试类,用于解决问题.

[TestFixture]
public class FailingTest
{
  [Test]
  public void Test()
  {
    var type = typeof(string);
    // any controller
    AuthenticationController c = new AuthenticationController();
    var httpContext = new Mock<HttpContextBase>();
    var context = c.ControllerContext = new ControllerContext(httpContext.Object, new RouteData(), c);

    IModelBinder converter = ModelBinders.Binders.GetBinder(type);
    var bc = new ModelBindingContext
    {
      ModelName = "testparam",
      ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, type),
      ValueProvider = ValueProviderFactories.Factories.GetValueProvider(context)
    };
    Console.WriteLine(converter.BindModel(context, bc));
  }
}
Run Code Online (Sandbox Code Playgroud)

异常"对象引用未设置为对象的实例." ValueProviderFactories.Factories.GetValueProvider(context)被叫时被抛出.stacktrace看起来像这样:

Microsoft.Web.Infrastructure.dll!Microsoft.Web.Infrastructure.DynamicValidationHelper.ValidationUtility.CollectionReplacer.GetUnvalidatedCollections(System.Web.HttpContext context) + 0x23 bytes   
Microsoft.Web.Infrastructure.dll!Microsoft.Web.Infrastructure.DynamicValidationHelper.ValidationUtility.GetUnvalidatedCollections(System.Web.HttpContext context, out System.Collections.Specialized.NameValueCollection …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc unit-testing httpcontext asp.net-mvc-3

9
推荐指数
1
解决办法
2239
查看次数

MVC,不再"假设"使用HttpContext.Current了?

这里的帖子中有人评论说在使用MVC时不应该使用HttpContext.Current,而是应该使用ControllerBase.ControllerContext.在某些方面,这是有道理的,但在其他方面却没有.

例如,ControllerContext是一个实例变量,所以在我想引用的所有地方,比如我的Session变量,我需要有一个对Controller的引用?为什么我们"不应该"在MVC中使用HttpContext.Current,当你还可以的时候?是否有一个"适当的"MVC"方式"来获取我的Session对象而无需引用Controller?

我知道测试方面,它更好的原因在许多其他地方说明,但我正在研究一个管理Session变量和引用HttpContext.Current的项目,我想知道是否有更好的方法来获取Session对象没有传递对控制器的引用.

asp.net-mvc controller httpcontext

9
推荐指数
1
解决办法
5735
查看次数

ASP.Net中线程敏捷性的含义是什么?

我正在阅读一篇关于HttpContext和CallContext的文章,看看线程敏捷性.这是什么意思?

c# asp.net httpcontext threadpool

9
推荐指数
1
解决办法
2806
查看次数

如何模拟或伪造HttpApplication/HttpContext进行测试

我正在尝试在我的MVC应用程序上运行一些测试,但是我一直在经历一个让它运行起来的世界.我会尽力做到这一点:

我正在使用RhinoMocks尝试这样的事情:

建立:

MockRepository mocks = new MockRepository();
HttpContextBase _mockContext = mocks.FakeHttpContext();
mocks.SetFakeControllerContext(new LoginController());
HttpApplicationStateBase appState = MockRepository.GenerateStub<HttpApplicationStateBase>();
_mockContext.Expect(mc => mc.Application).Return(appState);
HttpContext.Current = _mockContext.ApplicationInstance.Context;
Run Code Online (Sandbox Code Playgroud)

这是FakeHttpContext()方法:

public static HttpContextBase FakeHttpContext(this MockRepository mocks)
{
    HttpApplication app = mocks.PartialMock<HttpApplication>();

    HttpContextBase context = mocks.PartialMock<HttpContextBase>();
    HttpRequestBase request = mocks.PartialMock<HttpRequestBase>();
    HttpResponseBase response = mocks.PartialMock<HttpResponseBase>();
    HttpSessionStateBase session = mocks.PartialMock<HttpSessionStateBase>();
    HttpServerUtilityBase server = mocks.PartialMock<HttpServerUtilityBase>();

    SetupResult.For(context.ApplicationInstance).Return(app);

    SetupResult.For(context.Request).Return(request);
    SetupResult.For(context.Response).Return(response);
    SetupResult.For(context.Session).Return(session);
    SetupResult.For(context.Server).Return(server);

    mocks.Replay(context);
    return context;
}
Run Code Online (Sandbox Code Playgroud)

我真的需要访问,HttpContextBase.Request.AppRelativeCurrentExecutionFilePath但它总是返回null.同样的道理HttpContext.Current.Request.RequestContext.

有人可以帮帮我吗?可以肯定地说,我现在绝望了.

c# integration-testing moq httpcontext asp.net-mvc-4

9
推荐指数
1
解决办法
5849
查看次数

在 ASP.NET Core 2.x 中手动创建 HttpContext

我正在尝试将 Razor 视图呈现为来自托管服务的字符串。通过使用,IRazorViewEngine我可以使用如下所示的方式将视图呈现为字符串:

 _viewEngine.FindView(actionContext, viewName, false);
var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = model
                };

                var viewContext = new ViewContext(
                    actionContext,
                    viewResult.View,
                    viewDictionary,
                    new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),
                    sw,
                    new HtmlHelperOptions()
                );
                viewContext.RouteData = httpContext.GetRouteData();   //set route data here

                await viewResult.View.RenderAsync(viewContext);
Run Code Online (Sandbox Code Playgroud)

但是,当Controller由于缺少而没有从 a 调用时,这会崩溃HttpContext。我尝试手动构建 HttpContext,但在 Microsoft Mvc 代码深处遇到许多错误和空异常,这极难调试。我尝试过像RazorLight这样的库,它不适合我的需求,因为它不能正确支持@inject指令。我认为我最好的解决方案是尝试模拟一个假的 HttpContext/ControllerContext 以传递给本机 ViewEngine。但是,当我创建一个 new 时DefaultHttpContext,我在此处得到一个 NullReferenceException ,但是很难跟踪代码并找到它的来源。

有没有办法创建一个新的 HttpContext?

c# httpcontext asp.net-core-mvc asp.net-core

9
推荐指数
1
解决办法
5719
查看次数

获取 ASP.NET-Core 2.2 控制器中的控制器名称和方法名称

我知道在 asp.net-core 2.2 中,我可以按如下方式获取操作名称:

ControllerContext.ActionDescriptor.ActionName
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种方法来获取 asp.net-core 2.2 中当前请求/页面的控制器名称

我将不胜感激任何指南。

谢谢

c# controller httpcontext asp.net-core-2.2

9
推荐指数
2
解决办法
1万
查看次数