我为5月的Web应用程序布局构建了一个Razor View。在我的布局中,我想让用户的照片进入我的布局。但是,问题是如何从Web API获取用户的照片,然后将其返回到Razor View
这是我的API代码:
[HttpGet("employee-photo/{employeeId}")]
public async Task<IActionResult> GetEmployeePhoto(string employeeId)
{
var employeeIdClaim = this.UtilityService.GetEmployeeIdClaim(User);
if (employeeId != employeeIdClaim)
{
return null;
}
var employeePhoto = await this.FileStorage.GetEmployeePhoto(employeeId);
var name = employeeId + ".jpg";
return File(employeePhoto, "image/jpg", name);
}
这是我的剃刀视图
<a class="nav-link dropdown-toggle text-white" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img src="@Url.Action("/api/v1/blob/employee-photo/18060001")" /><span class="hidden-xs">@User.Claims.Where(Q => Q.Type == "FullName").Select(Q => Q.Value).FirstOrDefault()</span>
<i class="fa fa-caret-down"></i>
</a>
api/v1/blob
是我的API路径,我只是不在这里写所有其他代码
我可以从API获取照片(图像)到Razor View吗?怎么样?谢谢
答案 0 :(得分:1)
如果您正在寻找扩展方法@Url.Action()
的重载,则会看到一个重载,它带有如下所示的字符串参数:
public static string Action(this Microsoft.AspNetCore.Mvc.IUrlHelper helper, string action)
action
是指实际的操作方法名称(即GetEmployeePhoto
),而不是在HttpGetAttribute
中设置的API URL。因此,此API URL调用是错误的,并且永远不会达到API控制器的动作:
<img src="@Url.Action("/api/v1/blob/employee-photo/18060001")" />
您应该使用不带@Url.Action()
辅助符的完整URL字符串来使它起作用:
<img src="/api/v1/blob/employee-photo/18060001" />
答案 1 :(得分:1)
如答案前所述,在这种情况下,Url.Action不是从api获取照片的正确方法。
我认为您的GetEmployeePhoto方法中没有异常。只需使用直接网址即可:
<img src="/api/v1/blob/employee-photo/18060001" />
仍然没有得到图像,只需尝试以下操作:
为您的方法设置一个断点。
直接从浏览器请求您的api端点。
如果调试器到达断点,请检查方法的行为 (您的方法应将照片返回下载)。
如果您的方法不符合预期或返回错误,请在此处共享。
如果调试器未到达断点,则检查您的api路由。