web-dev-qa-db-ja.com

HttpContext.CurrentがMVC 4プロジェクトで解決しない

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();
}

Foreachの「HttpContext.Current.Request.Files.Keys」が解決していませんか?使用方法が正しく、Visual Studioには「解決」オプションがありません。

33
Nick

問題は、ControllerクラスにHttpContextと呼ばれるパブリックプロパティがあることです( http://msdn.Microsoft.com/en-us/library/system.web.mvcを参照してください.controller.httpcontext.aspx )。

これは、コントローラーで修飾なしで使用しようとすると、System.Web.HttpContextではなくローカルプロパティに解決されることを意味します。プロパティのタイプはHttpContextBaseで、これはあなたが望むことをするRequestプロパティを持っています(ただし、System.Web.HttpContextから取得するのと同じクラスではないことに注意してください) 。

56
Chris

System.Web.をプレフィックスとして試してください

System.Web.HttpContext.Currentを試すと、Currentがそこにありますが、HttpContext.Currentを試すと、 'Current'を認識しません。 usingステートメントにSystem.Webがありますが、 'Current'へのアクセスを取得するためにそれを指定する必要があるようです。

100
user2343180

非常にシンプルなライブラリの追加

using System.Web;

そして交換

context.Response -> HttpContext.Current.Response

手段

context -> HttpContext.Current

そしてあなたの問題は解決されました。

2
Dilip0165