2

ユーザーは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"
    });

しかし、オーバーロード関数なしで動作し、このケースをRegisterRoutesGlobal.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}"
    });

質問が少し長くなりましたが、希望する結果が得られることを確認したかったのです。

4

1 に答える 1

2

申し訳ありませんが、これは ASP.NET ルーティングではサポートされていません。ルート定義に複数のパラメーターが必要な場合は、コントローラー アクションにコードを追加して、フォルダーとパス名を組み合わせる必要があります。

別の方法は、キャッチオール ルートを使用することです。

routes.MapRoute(
    "DownloadPriceInformations",
    "DownloadPriceInformations/{*folderAndFile}",
    new
    {
        controller = "Document",
        action = "DownloadPDF"
    });

また、特別な {*folderAndFile} パラメーターには、最初の静的テキストの後のすべてが含まれます。これには、すべての「/」文字 (存在する場合) が含まれます。その後、アクション メソッドでそのパラメーターを取得できます。これは、"clothes/Shirts.pdf" のようなパスになります。

また、セキュリティの観点から、許可されたパスのみが処理されることを完全に確認する必要があることにも注意してください。パラメータとして /web.config を渡す場合、web.config ファイルに保存されているすべてのパスワードと接続文字列をダウンロードできないようにする必要があります。

于 2013-01-31T18:52:57.603 に答える