2

私の見解では、私は次のコードを持っています:

@foreach (Document document in Model.Documents)
{
  <img src="@Url.Action("GetDocument", new { docId = Model.DocId, filename =  
  document.DocumentName })" />
}

コードをステップスルーすると、ファイル名は期待どおりに「clown.jpg」に解決されます。

ただし、このパラメーターが次のようにコントローラーに渡される場合:

[AcceptVerbs(HttpVerbs.Get)]
[OutputCache(Duration = 36000)]
public virtual ImageResult GetDocument(int docId, string filename)
    {
        var attachment = _docService.GetDocument(docId, filename);
        ...........
    }

filenameパラメータには追加の整数が追加されているため、その値は「clown.jpg?316767349393」のようになります。

それはなぜですか、そしてどうすればそれを行わないようにすることができますか?ファイル名でファイルを検索できなくなります。?からすべてを無視することで、これを回避する方法をハックすることができます。先に進みますが、なぜこれが起こっているのか、そしてそれを防ぐための正しい方法を知りたいです。

編集:コントローラーに次のコード行を追加することで、これを回避しました:

filename = filename.Split('?')[0];

しかし、明らかにそれは私がこれをコーディングしたい方法ではありません...

4

0 に答える 0