3

こんにちは、私は_layout私の要件に従って次のように機能しますが、ここで私が打たれたことがいくつかあります。つまり、次のように書いたものに対応する画像を表示したいと思います

@if (Session["UserName"] != null)
{
 <div class="logged_in" id="user_navigation" runat="server">
 <a title="Your Profile" href="">
 <img alt="" src="@Url.Action("GetPhoto", new { photoId = Session["UserName"] })" height="50" width="50" class="photo" />
</a>
</div>
}

しかし、これは私にとって必要な画像を表示していないので、誰かが私を助けることができます.ユーザーがログインした後にデータベースから画像を表示したい.またsession、いくつかのコントロールにも値を表示したい.

これは私のコントローラーコードです

public ActionResult GetPhoto(string photoId)
        {
            byte[] photo = null;
            var v = db.tblUsers.Where(p => p.UserName == photoId).Select(img => img.Photo).FirstOrDefault();
            photo = v;
            return File(photo, "image/jpeg");
        }
4

1 に答える 1

6

<img>構文に問題があるようです。次のようになります。

<img alt="" src="@Url.Action("GetPhoto","User", new { photoId = Session["UserName"].ToString() })" height="50" width="50" class="photo" />

コメント セクションによると、実際のコードで WebForms ビュー エンジンを使用しているようです ( <%= Html.Encode(Session["UserName"]) %>)。

これは、このコードにははるかに深刻な問題があると言われています。現在認証されているユーザーをパラメーターとして渡してはなりません。これは重大なセキュリティ上の脆弱性です。だからそれを取り除くことから始めます:

<img alt="" src="@Url.Action("GetPhoto", "User")" height="50" width="50" class="photo" />

そして、コントローラーアクション内で取得できます:

public ActionResult GetPhoto()
{
    string user = Session["UserName"] as string;
    byte[] photo = db
        .tblUsers
        .Where(p => p.UserName == user)
        .Select(img => img.Photo)
        .FirstOrDefault();
    return File(photo, "image/jpeg");
}
于 2013-02-04T12:25:27.117 に答える