Asp.net ASP。NET核心从Razor视图调用Web API
我为我的web应用程序布局构建了一个Razor视图。在我的版面中,我想在我的版面中获得用户的照片。但是,问题是如何从web api获取用户的照片并将其返回到Razor视图Asp.net ASP。NET核心从Razor视图调用Web API,asp.net,asp.net-mvc,api,razor,Asp.net,Asp.net Mvc,Api,Razor,我为我的web应用程序布局构建了一个Razor视图。在我的版面中,我想在我的版面中获得用户的照片。但是,问题是如何从web api获取用户的照片并将其返回到Razor视图 <a class="nav-link dropdown-toggle text-white" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<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代码:
[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);
}
[HttpGet(“员工照片/{employeeId}”)]
公共异步任务GetEmployeePhoto(字符串employeeId)
{
var employeeIdClaim=this.UtilityService.GetEmployeeIdClaim(用户);
if(employeeId!=employeeId索赔)
{
返回null;
}
var employeePhoto=wait this.FileStorage.GetEmployeePhoto(employeeId);
var name=employeeId+“.jpg”;
返回文件(employeePhoto,“image/jpg”,名称);
}
这是我的观点
<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视图吗?怎么用?谢谢如果您正在寻找扩展方法重载,您将看到一个重载,它采用如下字符串参数:
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不是从api获取照片的正确方法 在我看来,你的GetEmployeePhoto方法没有什么异常。只需使用直接url,如:
<img src="/api/v1/blob/employee-photo/18060001" />
您仍然无法获得图像,请尝试以下操作:
- 为方法设置断点
- 直接从浏览器请求api端点
- 如果调试器到达断点,请检查方法的行为 (您的方法应将照片作为下载返回)
- 如果您的方法不符合预期或返回错误,请在此处共享
- 若调试器未到达断点,只需检查api路由即可
Url.Action
。不,我尝试过,它没有命中api是的,可能我没有正确使用Url.Action,或者可能有另一种方法从视图调用api?可能您应该直接使用路径,而不使用Url.Action
,例如
。由于URL路径使用属性路由,因此@URL.Action()
似乎不适用,因为它需要正确的控制器和操作名称。它不起作用。现在是否已到达控制器断点?除了API URL本身,还有其他错误设置,我假设此时图像仍然没有显示。