Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ASP。NET核心从Razor视图调用Web API_Asp.net_Asp.net Mvc_Api_Razor - Fatal编程技术网

Asp.net ASP。NET核心从Razor视图调用Web API

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">

我为我的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">
   <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本身,还有其他错误设置,我假设此时图像仍然没有显示。