在 .net core 6 的导航栏中显示用户个人资料图片

Display user profile picture in navbar in .net core 6

我有以下逻辑 return wwwroot 文件夹中的图像存储。每次 Url.Action 调用控制器中的 Action 方法时,它 return 是一个用户图像(如果存在),否则为空白图像。您如何 return 从控制器到 Url.Action 的物理图像路径结果?任何帮助将非常感激。 return物理图片路径用什么方法?

这是我在 Navbar Razor 页面 (CSHTML) 上的用户图像代码:

<img class="rounded-circle me-1" src="@Url.Action("MyProfilePic", "MyProfile")" height="24" asp-append-version="true"/>

控制器操作方法:(.NET Core)

public async Task<IActionResult> MyProfilePic()
{
    var user = await userManager.GetUserAsync(User);
    var profilPicName = user.ProfilePicName;
    if (profilPicName != null)
    {
    var ext = ".jpg";
    string fullname = Path.Combine(profilPicName,ext) ;
    string profilePicPath = Path.Combine(webHostEnvironment.WebRootPath, "images", fullname);
    return profilePicPath //Full path of image
    }
    return //Path of the ImagePlaceholder
}

经过漫长的一天,这里是寻找相同解决方案的人的解决方案。

图片标签:

<img class="rounded-circle me-1" src="@Url.Action("UserProfilePicMethod", "UserProfileController",new{id=ViewData["userId"]})" height="24" asp-append-version="true"/>

并且在UserProfileController中执行如下操作方法:

    public async Task<IActionResult> UserProfilePicMethod(string? id)
    {
        var user = await userManager.FindByIdAsync(id);
        var profilPicName = user.ProfilePicName;
        if (profilPicName != null)
        {
            //I upload only jpg files. So my method is for jpg.
            //You can customize as per your requirements.
            var ext = ".jpg";
            
            //Get path for your file by path.combine filename+wwwpath+ext
            var fullname = Path.Combine(profilPicName, ext);
            string profilePicPath = Path.Combine(webHostEnvironment.WebRootPath, "images", fullname);
            //return the image file path
            return PhysicalFile(profilePicPath, "image/jpg");
        }
        //If no image exists return a placeholder image
        var profilePicPathNull = Path.Combine(webHostEnvironment.WebRootPath, "images", "placeholder.jpg");
        return PhysicalFile(profilePicPathNull, "image/jpg");
    }

这是关于如何return物理文件路径的粗略想法。可以根据需求定制。

感谢@freedomn-m 在评论部分为我指明了正确的方向。非常感谢您的时间和精力!

同样,这只是将用户个人资料图片调用到您的布局或页面的一种方法。当然还有更多。这是我使用的解决方案。

或者最简单的方法是在您的 _layout.html:

中使用身份中的内置用户管理器
@{
var user = await userManager.GetUserAsync(User);
var profilepicName = user.ProfilePicName;
var profilePicPath = "~/images" + profilepicName ?? "blankProfilePic.jpg";
}

然后在需要图片的地方调用图片标签,如下所示:

<img class="rounded-circle me-1" src="@profilePicPath")" height="24" asp-append-version="true"/>