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

Sér*_*eno 5 c# asp.net-web-api .net-core

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

在另一种PicturesController方法中,我使用以下代码获取了 URL:

var url = Url.RouteUrl("GetPicture", new { id = picture.Id }, Request.Scheme);
Run Code Online (Sandbox Code Playgroud)

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

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

var url = Url.Action("GetPicture", "PicturesController", new { id = picture.Id }, Request.Scheme);
Run Code Online (Sandbox Code Playgroud)

这就是方法:

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");
    }
  ...
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 3

问题是您GetPicture在这段代码中使用:

var url = Url.Action("GetPicture", "PicturesController", new { id = picture.Id }, Request.Scheme);
Run Code Online (Sandbox Code Playgroud)

第一个参数是操作Url.Action的名称,在您的情况下是,所以它应该是Get

var url = Url.Action("Get", "PicturesController", new { id = picture.Id }, Request.Scheme);
Run Code Online (Sandbox Code Playgroud)

  • 避免使用文字字符串,而使用 nameof(GetPicture) 和 nameof(PicturesController) 代替。 (4认同)