2010-12-04 12 views
2

私はMVC 2でASP.NETを使用しており、ローカルファイルURLをサーバーアドレスに変換するのに問題があります。それはかなりシンプルで一般的な仕事のように見えるだろうが、Googleの検索は私に良い答えを与えてくれない。 (おそらく私は検索で吸う)asp.netのサーバー上でローカルファイルのhttp urlパスを取得します

私はビュー内のHTMLフォームからファイルを取り出し、それをディスクに保存するコントローラを持っています。このファイルの実際のURLをビューに戻す必要があります。どのような方法を使用しても、私はいつもhttpパスの代わりにファイルのローカルパスを持つ文字列を取得します。

私は、プロジェクトがデプロイされた後にURLがhttpアドレスに変換される可能性があると思っていますが、何かをハードコードすることなくデバッグするには本当にサーバーアドレスが必要です。

は、いくつかのコントローラメソッドで、次の例を考えてみましょう:

string url = Url.RequestContext.HttpContext.Server.MapPath("~/Content/Files/" + Path.GetFileName(file.FileName)); 
// outputs: "C:\\Users\\xxx\\Documents\\Visual Studio 2010\\Projects\\[ProjectName]\\Content\\Files\\file.png" 
// whereas i'd like something like "http://localhost/Content/Files/file.png" instead 

任意のアイデア?

+0

を 'Server.MapPath'は、ローカルファイルを返し、ローカルファイルへのURLをマップします。それを使用しないでください。 – Oded

答えて

3

このファイルを保存する場所によって異なります。仮想ディレクトリルートの外にあるディレクトリに格納すると、そのディレクトリにアクセスすることはできません。ファイルがHTTP経由でアクセス可能であるフォルダ内にある場合は、単にContent方法使用できます。

string url = Url.Content("~/Content/Files/foo.txt"); 
+0

私はファイルをContent/Filesフォルダに保存しています。私はむしろ私のビューでUrl.Contentを使用する代わりに、ファイルのURLを返すことができます。この理由は、私はjavascriptのURLでさらに作業したいということです。 (URLを[BB]コードに変換して、私が作業しているチャットアプリケーションのテキストボックスに挿入する) – Arch

+0

あなたのコントローラでUrl.Contentを使用することができます。 Urlはコントローラのプロパティです。 –

+0

私のコントローラでUrl.Contentを使用することをお勧めします。サーバーのベースURLを取得するにはどうすればよいですか?すなわち:http:// localhost/theApp? – Arch