我最近一直在考虑类似的事情。矩阵 URI 并不是什么新鲜事物,但并未广为人知或使用。我偶然发现了这个问题,空手而归。
经过更多研究,我决定编写一个自定义模型绑定器。我首先创建了一个存根来探索自定义模型绑定器是如何工作的,但是当我将它连接到我的控制器方法时,我有一个随机的想法......如果我只是使用 HttpGet 模板告诉 Web API 如何解析 URI并提取矩阵属性。
有效!这是代码:
/// <summary>
/// Retrieve a file resource by guid identifier
/// </summary>
/// <param name="id">A guid representing the generated ID of the resource</param>
/// <param name="fragment">hash of fragment being requested</param>
/// <returns></returns>
/// <response code="200">Returns the requested resource</response>
/// <response code="400">One or more of the values given was invalid</response>
/// <response code="404">The requested resource was not found</response>
/// <response code="303">Redirect to canonical/stable identity</response>
[HttpGet("file/id/{id};fragment={fragment}")]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status303SeeOther)]
public async Task<IActionResult> GetById(Guid? id, string fragment)
{
if (id == null)
return BadRequest("");
...
return File(bytes, contentType, fileName);
}
FWIW我正在使用.net 5,但我有理由确定这至少在.net core 3中有效。
希望这可以帮助下一个解决这个问题的人!