【问题标题】:How to build server url for DTOs如何为 DTO 构建服务器 url
【发布时间】:2020-03-21 07:29:12
【问题描述】:

我想为我的 DTO 添加一个 url,特别是集合中每个对象的规范链接。我正在使用 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 加载后更新我的 Group 对象集合?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-webapi asp.net-core-routing


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2019-04-27
      • 2018-03-10
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2013-03-11
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多