如何为 DTO 构建服务器 url

How to build server url for DTOs

我想向我的 DTO 添加一个 url,特别是为集合中的每个对象添加一个规范的 link。我正在使用 Dapper 将我的 SQL 结果映射到一个集合中,所以我希望在 POCO 本身中执行此操作。

public class Group {
 public string Name { get; set; }
 public string url {
  get {
    //CODE TO BUILD LINK HERE (e.g., https://example.com/v1/groups/1234)
  }
 }
}

我见过 Url.Link() 的用法,但我只在我的控制器中使用它 - 而不是上面的 url 属性。如果无法在 POCO 中完成,是否有一种首选方法可以在 Dapper 加载它们后更新我的组对象集合?

dapper/service 加载记录后,您需要遍历集合并根据记录的标识符和路由

生成URL

假设

public class Group {
    public string Name { get; set; }
    public string Url { get; set; }
}

生成记录 URL 的控制器可以遵循以下模式

[Route("v1/groups")]
public class GroupsController : Controller {

    //...omitted for brevity

    //GET v1/groups
    [HttpGet("")]
    public IActionResult Get() {
        IEnumerable<Group> groups = service.GetGroups()
            .Select(group => {            
                var url = Url.RouteUrl("GetGroup", new { name = group.Name });
                group.Url = url;
                return group;
            }).ToList();
        if(!groups.Any()) return NotFound();
        return Ok(groups);
    }

    //GET v1/groups/1234
    [HttpGet("{name}", Name = "GetGroup")]
    public IActionResult Get(string name) {
        var group = service.GetGroup(name);
        if(group == null) return NotFound();
        group.Url = Url.RouteUrl("GetGroup", new { name = group.Name });
        return Ok(group);
    }
}

引用Generating URLs by route