C# 如何为DTO构建服务器url

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

我想向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加载组对象后更新我的组对象集合?

在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(组);
}
}
参考文献