HttpContext.Current没有在MVC 4项目中解析

时间:2013-02-27 16:37:31

标签: c# asp.net asp.net-mvc asp.net-mvc-4 httpcontext

我想使用ImageResizer(来自ImageResizing dot net)。我通过NuGet为MVC安装了ImageResizer。但是,当我使用示例中的以下代码时:

//Loop through each uploaded file
foreach (string fileKey in HttpContext.Current.Request.Files.Keys)
{
    HttpPostedFile file = HttpContext.Current.Request.Files[fileKey];
    if (file.ContentLength <= 0) continue; //Skip unused file controls.

    //The resizing settings can specify any of 30 commands.. See http://imageresizing.net for details.
    //Destination paths can have variables like <guid> and <ext>, or 
    //even a santizied version of the original filename, like <filename:A-Za-z0-9>
    ImageResizer.ImageJob i = new ImageResizer.ImageJob(file, "~/uploads/<guid>.<ext>", new ImageResizer.ResizeSettings(
                            "width=2000;height=2000;format=jpg;mode=max"));
    i.CreateParentDirectory = true; //Auto-create the uploads directory.
    i.Build();
}

&#34; HttpContext.Current.Request.Files.Keys&#34;在foreach没有解决?我的使用正确,Visual Studio不提供&#34; Resolve&#34;选项。

3 个答案:

答案 0 :(得分:98)

尝试使用System.Web.

作为前缀

如果我尝试System.Web.HttpContext.Current,那么Current就在那里,但如果我尝试HttpContext.Current,那么它就无法识别'当前'。我的using语句中有System.Web,但我仍然需要指定它才能访问'Current'。

答案 1 :(得分:56)

问题是Controller类有一个名为HttpContext的公共属性(请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx)。

这意味着当您尝试在控制器中没有任何限定条件的情况下使用它时,它会解析为本地属性而不是System.Web.HttpContext。该属性的类型为HttpContextBase,它具有Request属性,可以执行您想要的操作(但请注意,它与您从System.Web.HttpContext获得的类不同。< / p>

答案 2 :(得分:2)

非常简单的添加库

using System.Web;

并替换

context.Response -> HttpContext.Current.Response

表示

context -> HttpContext.Current

,你的问题就解决了。