如何将HttpRequestBase转换为HttpRequest对象?

Pur*_*ome 84 asp.net-mvc httprequest

在我的ASP.NET MVC控制器中,我有一个需要一个HttpRequest对象的方法.我有权访问的只是一个HttpRequestBase对象.

无论如何我可以以某种方式转换这个?

我能做什么/应该做什么?

Cou*_*ero 66

你应该总是在你的应用程序中使用HttpRequestBase和HttpResponseBase,因为它们与不可能测试的具体版本相关(没有typemock或其他魔法).

只需使用HttpRequestWrapper类进行转换,如下所示.

var httpRequestBase = new HttpRequestWrapper(Context.Request);
Run Code Online (Sandbox Code Playgroud)

  • 那是在错误的方向上进行转换。问题是:如果我_有_一个“HttpRequestBase”,我如何从中_获取_一个实际的“HttpRequest”? (5认同)
  • 另外要注意的是,不仅使用`HttpRequestBase`和`HttpResponseBase`,还有`HttpContextBase`。:) (3认同)

Kev*_*son 49

这是你的方法,所以你可以重写它HttpRequestBase吗?如果没有,你总是可以得到当前HttpRequestHttpContext.Current.HttpRequest转嫁.但是,我经常在ASP.NET中提到的类中包含对HttpContext的访问:删除System.Web依赖项以获得更好的单元测试支持.

  • 要确保您正在抓取HttpContext类而不是控制器成员,请尝试使用System.Web.HttpContext.Current. (47认同)
  • 令人尴尬的是,我也想到了这一点,但它没有用.HttpContext是MVC上下文..所以没有暴露'Current'属性.我不知道如何访问'oldschool'HttpContext.Current ...... ??? (4认同)
  • System.Web.HttpContext.Current.Request (2认同)

小智 30

你可以使用

System.Web.HttpContext.Current.Request
Run Code Online (Sandbox Code Playgroud)

这里的关键是你需要完整的命名空间来获得"正确的"HttpContext.

我知道问这个问题已经有4年了,但是如果这对某人有帮助的话,那就去吧!

(编辑:我看到Kevin Hakanson已经给出了这个答案......所以希望我的回答能帮助那些只是阅读答案而不是评论的人.):)


小智 9

尝试使用HttpRequestBase使用/创建HttpRequestWrapper.


Moh*_*our 8

要在ASP.NET MVC4 .NET 4.5中获取HttpRequest,您可以执行以下操作:

this.HttpContext.ApplicationInstance.Context.Request
Run Code Online (Sandbox Code Playgroud)