标签: httpcontext

在单元测试中设置HttpContext.Current.Session

我有一个Web服务,我正在尝试进行单元测试.在服务中,它从HttpContext类似物中提取了几个值,因此:

 m_password = (string)HttpContext.Current.Session["CustomerId"];
 m_userID = (string)HttpContext.Current.Session["CustomerUrl"];
Run Code Online (Sandbox Code Playgroud)

在单元测试中,我使用简单的工作者请求创建上下文,如下所示:

SimpleWorkerRequest request = new SimpleWorkerRequest("", "", "", null, new StringWriter());
HttpContext context = new HttpContext(request);
HttpContext.Current = context;
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试设置值时 HttpContext.Current.Session

HttpContext.Current.Session["CustomerId"] = "customer1";
HttpContext.Current.Session["CustomerUrl"] = "customer1Url";
Run Code Online (Sandbox Code Playgroud)

我得到null引用异常,表示HttpContext.Current.Session为null.

有没有办法在单元测试中初始化当前会话?

c# unit-testing web-services httpcontext

180
推荐指数
8
解决办法
15万
查看次数

在测试初始化​​方法中模拟HttpContext.Current

我正在尝试将单元测试添加到我构建的ASP.NET MVC应用程序中.在我的单元测试中,我使用以下代码:

[TestMethod]
public void IndexAction_Should_Return_View() {
    var controller = new MembershipController();
    controller.SetFakeControllerContext("TestUser");

    ...
}
Run Code Online (Sandbox Code Playgroud)

使用以下帮助程序来模拟控制器上下文:

public static class FakeControllerContext {
    public static HttpContextBase FakeHttpContext(string username) {
        var context = new Mock<HttpContextBase>();

        context.SetupGet(ctx => ctx.Request.IsAuthenticated).Returns(!string.IsNullOrEmpty(username));

        if (!string.IsNullOrEmpty(username))
            context.SetupGet(ctx => ctx.User.Identity).Returns(FakeIdentity.CreateIdentity(username));

        return context.Object;
    }

    public static void SetFakeControllerContext(this Controller controller, string username = null) {
        var httpContext = FakeHttpContext(username);
        var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
        controller.ControllerContext = context;
    }
}
Run Code Online (Sandbox Code Playgroud)

此测试类继承自具有以下内容的基类:

[TestInitialize]
public void Init() {
    ...
} …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing mocking httpcontext

171
推荐指数
4
解决办法
12万
查看次数

如何从ASP.NET MVC 1中的HttpContextBase获取HttpContext对象?

我正在使用一些WebForms/MVC无关的工具,我需要获得一个HttpContext给定HttpContextBase对象引用的实例.我无法使用,HttpContext.Current因为我需要它也可以异步工作(在异步请求期间HttpContext.Current返回null).我知道HttpContextWrapper,但走错了路.

asp.net-mvc httpcontext

151
推荐指数
3
解决办法
6万
查看次数

如何使用Moq在ASP.NET MVC中模拟HttpContext?

[TestMethod]
public void Home_Message_Display_Unknown_User_when_coockie_does_not_exist()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    context
        .Setup(c => c.Request)
        .Returns(request.Object);
    HomeController controller = new HomeController();

    controller.HttpContext = context; //Here I am getting an error (read only).
    ...
 }
Run Code Online (Sandbox Code Playgroud)

我的基本控制器有一个重写的Initialize,它得到了这个requestContext.我试图通过这个,但我没有做正确的事情.

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
}
Run Code Online (Sandbox Code Playgroud)

在哪里可以获得有关使用Moq模拟我的RequestContext和HttpContext的更多信息?我正在尝试模拟cookie和一般上下文.

c# asp.net-mvc moq mocking httpcontext

97
推荐指数
5
解决办法
6万
查看次数

如何在线程或计时器中访问HttpServerUtility.MapPath方法?

System.Timers.Timer在我的Asp.Net应用程序中使用a ,我需要使用HttpServerUtility.MapPath似乎只能通过的方法HttpContext.Current.Server.MapPath.问题是,HttpContext.Currentnull的,当Timer.Elapsed事件触发.

是否有另一种方法来获取对HttpServerUtility对象的引用?我可以在我的类'构造函数中注入它.安全吗?如何确保在当前请求结束时不会收集垃圾?

谢谢!

.net asp.net timer httpcontext

88
推荐指数
3
解决办法
4万
查看次数

从HttpContext获取当前的System.Web.UI.Page?

这实际上是一个两部分问题.首先,HttpContext.Current是否对应于当前的System.UI.Page对象?

第二个问题,可能与第一个问题有关,为什么我不能使用以下内容来查看当前页面是否实现了一个接口:

private IWebBase FindWebBase()
{
    if (HttpContext.Current as IWebBase != null)
    {
        return (IWebBase)HttpContext.Current.;
    }
    throw new NotImplementedException("Crawling for IWebBase not implemented yet");
}
Run Code Online (Sandbox Code Playgroud)

一般上下文是某些控件需要知道它们是作为SharePoint Webpart执行还是作为Asp.Net框架的一部分执行.

我通过要求控件传递对自身的引用,并检查控件的Page属性来解决问题,但我仍然很好奇为什么上面的方法不起作用.

编译器错误是:无法通过引用转换,装箱转换,拆箱转换,包装转换或空类型转换将System.Web.HttpContext转换为... IWebBase.

c# asp.net httpcontext

84
推荐指数
3
解决办法
9万
查看次数

如何获得wcf应用程序的工作路径?

我想获取WCF应用程序的工作文件夹.我怎么才能得到它?

如果我试试

HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
Run Code Online (Sandbox Code Playgroud)

我得到一个空引用异常(Http.Current对象为null).


我对工作文件夹的意思是我的WCF服务正在运行的文件夹.如果我设置aspNetCompatibilityEnabled="true",我收到此错误:

服务器没有提供有意义的回复; 这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的.

wcf path httpcontext

68
推荐指数
5
解决办法
9万
查看次数

在WebApi中使用HttpContext.Current是危险的,因为异步

我的问题与此有点相关:具有依赖注入的HttpContext.Items的WebApi等价物.

我们想使用Ninject在WebApi区域中使用HttpContext.Current注入一个类.

我担心的是,这可能非常危险,因为在WebApi(一切?)是异步的.

如果我在这些方面有误,请纠正我,这是我到目前为止调查的内容:

  1. HttpContext.Current通过Thread获取当前上下文(我直接查看了实现).

  2. 在异步任务中使用HttpContext.Current是不可能的,因为它可以在另一个Thread上运行.

  3. WebApi使用IHttpController和method Task<HttpResponseMessage> ExecuteAsync=>每个请求都是async =>你不能在action方法中使用HttpContext.Current.它甚至可能发生,更多的请求是通过相同的线程在同一个线程上执行的.

  4. 为了创建带有注入内容的控制器到构造函数中,IHttpControllerActivator与sync方法一起使用IHttpController Create.这是,ninject创建Controller及其所有依赖项.


  • 如果我在所有这4点中都是正确的,那么在动作方法或下面的任何层中使用HttpContext.Current是非常危险的,并且可能会产生意外结果.我看到很多公认的答案正是如此.恕我直言,这可以工作一段时间,但会在负载下失败.

  • 但是当使用DI创建一个Controller及其依赖项时,它是好的,因为它运行在一个独立的线程上.我可以从构造函数中的HttpContext获取一个值,它会安全吗?.我想知道每个Controller是否在每个请求的单个线程上创建,因为这可能会导致重负载下的问题,其中可以使用来自IIS的所有线程.

只是为了解释为什么我要注入HttpContext的东西:

  • 一种解决方案是在控制器动作方法中获取请求,并将所有层的所需值作为参数传递,直到它在代码深处使用.
  • 我们想要的解决方案:它们之间的所有层都没有被这个感染,我们可以在代码深处使用注入的请求(例如在一些依赖于URL的ConfigurationProvider中)

    如果我完全错误或者我的建议是正确的,请告诉我你的意见,因为这个主题似乎非常复杂.Thx提前!

multithreading asynchronous ninject httpcontext asp.net-web-api

61
推荐指数
2
解决办法
4万
查看次数

从不同的线程访问HttpContext.Current

我有一个C#ASP.NET应用程序,它启动了大约25个不同的线程,在一个名为SiteCrawler.cs的类中运行一些方法.

HttpContext.Current.Session我要保存用户所做的搜索结果,当所有线程都完成运行它呈现给用户.我的问题是该HttpContext.Current对象在生成的线程中为null,因为它不存在.

由于应用程序是多线程的限制,我还有什么其他选项来保存用户/会话特定数据而不使用会话?

我试图搜索Stackoverflow的每一寸都找到一个解决方案,但没有任何运气....

c# asp.net session httpcontext

53
推荐指数
5
解决办法
5万
查看次数

在控制器的构造函数中访问HttpContext.Request

我正在关注Microsoft的这个ASP.NET MVC教程:

我的代码略有不同,我试图HttpContext.Request.IsAuthenticated在控制器的构造函数中访问.

namespace SCE.Controllers.Application
{
    public abstract class ApplicationController : Controller
    {
        public ApplicationController()
        {
            bool usuario = HttpContext.Request.IsAuthenticated;
        }           
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是HttpContext始终为空.

这个问题有方法解决吗?

asp.net-mvc controllers httpcontext

52
推荐指数
6
解决办法
4万
查看次数