私はいくつかの奇妙な問題で遭遇しました。私はそれを理解していないので、すべてが正常に動作する前に私にとっては奇妙です。だから、私の仕事は、コントローラを呼び出してファイル名(拡張子付き)を渡すことです。コントローラーはこのファイルを認識し、ログに書き込んだり、ファイルがあれば(ダウンロードフォルダに)戻します。私は何をやっている:ASP.NET MVC 3:idがファイル名のときにファイルの代わりにコントローラを探す方法
public class DownloadController : Controller
{
public ActionResult Files(string id)
{
string filePath = Server.MapPath(Url.Content(string.Format("~/Downloads/{0}", id)));
string serverPath = Url.Content(string.Format("~/Downloads/{0}", id));
string ext = Path.GetExtension(filePath);
if (!System.IO.File.Exists(filePath))
{
//return to the error controller
}
string mem = "text/html";
if (ext == ".zip")
{
mem = "application/x-zip-compressed";
}
else if (ext == ".html" || ext == ".htm")
{
mem = "text/html";
}
else if (ext == ".pdf")
{
mem = "application/pdf";
}
//Save info about downloads into DB
repStat.SaveStatInfo(id, HttpContext.Request.UserHostAddress,
HttpContext.Request.UserHostName, HttpContext.Request.UserAgent);
return File(serverPath, mem, id);
}
}
ことのGlobal.asaxの部分があります:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("Content/{*pathInfo}");
それはより多くの "無視" を持っていません。
したがって、問題は私が電話をしているときです:mysite.com/download/files/test.pdfサーバーは私に「ページが見つかりません」と返します。もちろん、ダウンロード/ファイルパスにそのようなファイルはありません!コントローラーを呼び出す必要がありますが、実際のファイルは呼び出さないでください。 mysite.com/download/files/testのような拡張機能を削除すると、サーバはコントローラを呼び出します。私はなぜパラメータとしてファイル名を認識しないのかわかりませんし、ファイルを見つけようとします。
他のコントローラを使用しようとすると、まったく同じ動作が起こります。パラメータに拡張子がないとすぐに、サーバはファイルを探します。
最も奇妙なことは、すべてがローカルでうまく動作しますが、サーバーでは機能しません(ツールは長くは動作しませんでしたが、停止しました)。
お返事ありがとうございます。実際には、mysite.com/downloads/test.txtのようなパスを指定するだけで問題を解決できます。この場合、このファイルが見つかります。奇妙なのはなぜこの場合asp.net mvcが実際のファイルではなくコントローラを探すべきか理解していないような理由です。私はおそらく、サーバー側が不適切に構成されていると思う、asp.netと間違って何かを開始します。 – mimic
私は情報を追加したいと思います。 X-AspNet-Version:4.0.30319 X-AspNetMvc-バージョン:3.0 X-AspNetバージョンは、 Powered By:ASP.NET "ただし、拡張子を追加すると「サーバー:Microsoft-IIS/6.0 X-Powered-By:ASP.NET」 – mimic
ファイルを直接指定すると、ファイルが存在し、例えば、類似するファイルを検索する代替ページを返すなど、何でもよい。とにかく、それがあなたの目的を果たすならば、クール!新しく追加された情報は、リクエストを確認するだけで、それとは異なる理解ができます。たぶんドットのせいで、IIS6はファイルを探すだけで、コントロールを必要とすることさえ考慮しません。わからない... –