ユーザーはPriceInformations
、文書タイプを指定するサブフォルダーを含むフォルダーにある価格情報 PDF をダウンロードできます。
/PriceInformations/Clothes/Shoes.pdf
/PriceInformations/Clothes/Shirts.pdf
/PriceInformations/Toys/Games.pdf
/PriceInformations/Toys/Balls.pdf
Document
これらの PDF をダウンロードするには、Controller で次のアクションを検討してください。
// Filepath must be like 'Clothes\Shoes.pdf'
public ActionResult DownloadPDF(string filepath)
{
string fullPath = Path.Combine(MyApplicationPath, filepath);
FileStream fileStream = new FileStream(fullPath, FileMode.Open, FileAccess.Read);
return base.File(fileStream, "application/pdf");
}
PDF ドキュメントを取得するために、クライアントは URL を次のようにすることを望んでいます。
/PriceInformations/Clothes/Shoes.pdf
この場合のオーバーロード関数を簡単に作成できます。
public ActionResult DownloadPDF(string folder, string filename)
{
return this.DownloadPDF(Path.Combine(folder, filename);
}
そしてそれを次のようにマッピングします
routes.MapRoute(
"DownloadPriceInformations",
"DownloadPriceInformations/{folder}/{filename}",
new
{
controller = "Document",
action = "DownloadPDF"
});
しかし、オーバーロード関数なしで動作し、このケースをRegisterRoutes
Global.asax にマップして、複数のパラメーターから 1 つのパラメーターを作成できるようになるかどうか、興味があります。
routes.MapRoute(
"DownloadPriceInformations",
"DownloadPriceInformations/{folder}/{filename}",
new
{
controller = "Document",
action = "DownloadPDF",
// How to procede here to have a parameter like 'folder\filename'
filepath = "{folder}\\{filename}"
});
質問が少し長くなりましたが、希望する結果が得られることを確認したかったのです。