【问题标题】:ASP. NET Core Call Web API from Razor ViewASP。 NET Core 从 Razor 视图调用 Web API
【发布时间】:2018-12-20 03:25:40
【问题描述】:

我为我的 Web 应用布局构建了一个 Razor 视图。在我的布局中,我想在我的布局中获取用户的照片。但是,问题是如何从 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 视图吗?如何?谢谢

【问题讨论】:

  • 尝试在控制器内设置断点,是否到达该断点?如果调试器从未到达该断点,则可能您没有正确使用Url.Action
  • 不,我试过了,它没有命中 api 是的,也许我没有正确使用 Url.Action,或者也许有另一种方法可以从视图中调用 api?
  • 可能你应该直接使用路径而不使用Url.Action,例如&lt;img src="/api/v1/blob/employee-photo/18060001" /&gt;。由于您的 URL 路径使用属性路由,@Url.Action() 似乎不适用,因为它需要正确的控制器和操作名称。
  • 它不工作
  • 控制器断点现在到达了吗?除了API URL本身还有其他设置错误,我认为此时图像仍然没有显示。

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


【解决方案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" />

【讨论】:

    【解决方案2】:

    如回答前所述,在这种情况下,Url.Action 不是从 api 获取照片的正确方法。

    在我看来,您的 GetEmployeePhoto 方法没有任何异常。只需使用直接网址,例如:

    <img src="/api/v1/blob/employee-photo/18060001" />
    

    仍然没有得到图像,请尝试以下操作:

    • 为您的方法设置断点。

    • 从浏览器直接请求您的 api 端点。

    • 如果调试器到达断点,检查你的方法的行为 (您的方法应该将照片作为下载返回)。

    • 如果您的方法不符合预期或返回错误,请在此处分享。

    • 如果调试器未到达断点,只需检查您的 api 路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2018-12-30
      • 2021-09-24
      • 2020-09-09
      • 2018-07-26
      • 2019-07-25
      相关资源
      最近更新 更多