在 .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"/>
我有以下逻辑 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"/>