如何为 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
我想向我的 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);
}
}