ASP。 Razor View中的NET Core Call Web API

时间:2018-12-20 03:25:40

标签: asp.net asp.net-mvc api razor

我为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吗?怎么样?谢谢

2 个答案:

答案 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路由。