Dotnet Core API - 获取控制器方法的 URL

Posted

技术标签:

【中文标题】Dotnet Core API - 获取控制器方法的 URL【英文标题】:Dotnet Core API - Get the URL of a controller method 【发布时间】:2019-06-27 14:01:15 【问题描述】:

我正在开发一个 API,它有两个控制器:PicturesControllerAccountControllerPicturesController 上有一个返回图像的方法,我想知道如何获取它的 URL。

在另一个 PicturesController 方法中,我使用下面的代码获得了 URL:

var url = Url.RouteUrl("GetPicture", new  id = picture.Id , Request.Scheme);

但我需要从另一个控制器 (AccountController) 获取相同方法的 URL。

我尝试了以下代码,但结果为空。

var url = Url.Action("GetPicture", "PicturesController", new  id = picture.Id , Request.Scheme);

就是这样:

public class PicturesController : Controller

  ...

   // GET api/pictures/id
    [HttpGet("id", Name = "GetPicture")]
    public async Task<ActionResult> Get(Guid id)
    
        var picture = await _context.Pictures.FirstOrDefaultAsync(p => p.IsActive() && p.Id == id);

        if (picture == null)
            return NotFound();

        return File(picture.PictureImage, "image/jpg");
    
  ...

【问题讨论】:

您的代码显示为GetPicture,但该操作称为Get 【参考方案1】:

问题是你在这段代码中使用了GetPicture

var url = Url.Action("GetPicture", "PicturesController", new  id = picture.Id , Request.Scheme);

Url.Action 的第一个参数是动作的名称,在你的例子中是Get,所以应该是

var url = Url.Action("Get", "PicturesController", new  id = picture.Id , Request.Scheme);

【讨论】:

避免使用文字字符串,改用 nameof(GetPicture) 和 nameof(PicturesController)。

以上是关于Dotnet Core API - 获取控制器方法的 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 dotnet core web api ::ffff:127.0.0.1 中获取客户端 IP 地址

Web api dotnet core 中的 Api 版本控制错误的自定义错误响应

在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件

无法从 API(dotNet Core)获取数据(使用角度)没有“Access-Control-Allow-Origin”

如何将动态对象序列化为 dotnet core 中的 JSON 字符串?

dotnet core docker web api没有连接