2013-02-27 20 views
27

ImageResizer(ImageResizing dot netから)を使用したいと思います。私はImageResizer for MVCをNuGet経由でインストールしました。しかし、私は例から、次のコードを使用して行くとき:HttpContext.CurrentがMVC 4プロジェクトで解決しない

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

は「HttpContext.Current.Request.Files.Keysを」foreachの中に解決されていませんか?私は正しい使い方をしており、Visual Studioは「解決」オプションを提供していません。

+0

HttpContext.Currentは何に設定されていますか(「解決」しますか)、HttpContext.Current.Request.Files.Keysは表示されません。このコードはあなたのコントローラ、または別のクラスからですか?これが別のクラスのメソッドから来た場合は、何らかの形でHttpContext.Currentを渡すようにしてください。呼び出すメソッドのパラメータとして、またはメソッドを呼び出す前にこの値を受け入れるpublicメンバ(HttpContext型の)を持っています。 – Floremin

+0

HttpContext.Currentはアプリケーションにとってグローバルではありません。これは要求に対応するアクションとビューに設定されますが、要求サイクルの外(モデル、ユーティリティクラスなどのようなもの)では存在しません。必要な場合は、@Floreminが示すように、アクションまたはビューからそれを渡す必要があります。 –

+0

OK - はい、これはコントローラのアクション内にあります。 HttpContextは解決しますが、Currentは解決しません。私は静的なCurrentなしでHttpContext.Request.Filesを見つけると、これはうまくいくようです。なぜ静的Currentがそこにないのか分かりません。コントローラーのコンテキストからアクセスできないのでしょうか?うまくいけば、静的なものを使用していないものが「欠けている」わけではない。ありがとう! – Nick

答えて

39

Controllerクラスには、HttpContextというパブリックプロパティがあります(http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx参照)。

これは、コントローラーで修飾なしで使用しようとすると、System.Web.HttpContextではなくローカルプロパティに解決されることを意味します。プロパティの型は、(ノートしかし、それはあなたがSystem.Web.HttpContextからになるだろうと同じクラスではないことをあなたがやりたいだろうRequest性質を持っていたHttpContextBaseです。

88

は私がSystem.Web.HttpContext.Currentをしようとすると、現在のがあるが、私はHttpContext.Currentをしようとした場合、それは「現在の」認識しないSystem.Web.

でそれを前に置く試してみてください。私は使用しているステートメントでSystem.Webを持っていますが、 'Current'にアクセスするにはまだそれを指定する必要があるようです。

+1

@Chrisは、usingステートメントにSystem.Webを組み込んだとしても、HttpContextの前にSystem.Webという接頭辞を付けなければならない理由に答えました。コントローラにはすでにHttpContextプロパティがあり、System.Webを使用せずに使用する場合、コントローラは現在のローカルプロパティを参照します。 – Niraj

2

非常にシンプルなアドオンライブラリ

using System.Web; 

context.Response -> HttpContext.Current.Response 

context -> HttpContext.Current 
を意味を置き換えます

となり、問題は解決します。

関連する問題