在mvc4中的_layout中显示数据库中的图像

Dor*_*eka 3 c# entity-framework-4 asp.net-mvc-4

嗨所有我有我的_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>
}
Run Code Online (Sandbox Code Playgroud)

但这并不是按照我的要求显示图像所以有人可以帮助我我想在用户登录后显示数据库中的图像我也希望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");
        }
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 6

您似乎遇到<img>语法问题.它应该是这样的:

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

根据评论部分,您似乎在实际代码(<%= Html.Encode(Session["UserName"]) %>)中使用了WebForms视图引擎.

这就是说这个代码有一个更严重的问题.不应将当前经过身份验证的用户作为参数传递.这是一个巨大的安全漏洞.所以从摆脱它开始:

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

然后在你的控制器动作内你可以检索它:

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");
}
Run Code Online (Sandbox Code Playgroud)