1

C# で MVC3 Web アプリケーションを作成しています。SQL データベースからのデータと、これらのデータに対応する画像を表示する検索画面を実装する必要があります。詳細ページに、このドキュメントへのリンクを作成しました。

        @{
        string fullDocumentPath = "~/History/" + Model.PICTURE_PATH + "/" + Model.PICTURE_NAME.Replace("001", "TIF");
    }
    @if (File.Exists(Server.MapPath(fullDocumentPath)))
    {
        <a href="@Url.Content(fullDocumentPath)" >Click me for the invoice picture.</a>
    }

問題は、ドキュメントを作成したシステム (およびデータベース内のパスへの参照を追加したシステム) が、多くのファイル名で % を使用することを選択したことです。このリンクがhttp://localhost:49823/History/044/00/aaau2vab.TIFある場合: 大丈夫です。このリンクが作成さhttp://localhost:49823/History/132/18/aagn%8ab.TIFれると、次のエラーで失敗します。

The resource cannot be found. 
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.
Requested URL: /History/132/18/aagn�b.TIF

どうすればこれを解決できますか?

4

2 に答える 2

0

Url.Encode()メソッドを使用して、特殊文字をエスケープします。

@{
   string documentDirectoryPath = "~/History/" + Model.PICTURE_PATH + "/";
   string documentName = Model.PICTURE_NAME.Replace("001", "TIF");
}
@if (File.Exists(Server.MapPath(documentDirectoryPath + documentName)))
{
  <a href="@Url.Content(documentDirectoryPath + Url.Encode(documentName))" >Click me for the invoice picture.</a>
} 
于 2013-03-19T09:23:29.190 に答える
0

アクセスしようとしている URL は URL エンコードされていません。使用できるのは ASCII 文字のみであるため、特殊文字の場合はパスを UrlEncode する必要があります。これらの文字のリストと、対応する ASCII 文字をこのリストで確認できます。

http://www.w3schools.com/tags/ref_urlencode.asp

UrlEncode メソッドを使用して、パス文字列を URL エンコードに変換できます。

http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

もう一度デコードしたい場合は、UrlDecode メソッドを使用できます。

http://msdn.microsoft.com/en-us/library/6196h3wt.aspx

于 2013-03-19T09:25:49.327 に答える