C# 如何为DTO构建服务器url
我想向DTO添加一个url,特别是集合中每个对象的规范链接。我正在使用Dapper将我的SQL结果映射到一个集合中,所以我希望在POCO本身中这样做C# 如何为DTO构建服务器url,c#,asp.net-core,asp.net-core-webapi,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Webapi,Asp.net Core Routing,我想向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.L
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);
}
}
[路线(“v1/组”)]
公共类组控制器:控制器{
//…为简洁起见省略
//获取v1/组
[HttpGet(“”)
public IActionResult Get(){
IEnumerable groups=service.GetGroups()
.选择(组=>{
var url=url.RouteUrl(“GetGroup”,新的{name=group.name});
Url=Url;
返回组;
}).ToList();
如果(!groups.Any())返回NotFound();
返回Ok(组);
}
//获取v1/groups/1234
[HttpGet(“{name}”,name=“GetGroup”)]
公共IActionResult Get(字符串名称){
var group=service.GetGroup(名称);
if(group==null)返回NotFound();
group.Url=Url.RouteUrl(“GetGroup”,新的{name=group.name});
返回Ok(组);
}
}
Reference在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);
}
}
[路线(“v1/组”)]
公共类组控制器:控制器{
//…为简洁起见省略
//获取v1/组
[HttpGet(“”)
public IActionResult Get(){
IEnumerable groups=service.GetGroups()
.选择(组=>{
var url=url.RouteUrl(“GetGroup”,新的{name=group.name});
Url=Url;
返回组;
}).ToList();
如果(!groups.Any())返回NotFound();
返回Ok(组);
}
//获取v1/groups/1234
[HttpGet(“{name}”,name=“GetGroup”)]
公共IActionResult Get(字符串名称){
var group=service.GetGroup(名称);
if(group==null)返回NotFound();
group.Url=Url.RouteUrl(“GetGroup”,新的{name=group.name});
返回Ok(组);
}
}
参考文献