【发布时间】:2016-03-11 14:10:57
【问题描述】:
当您有多个 DTO 用于同一个 POCO 时,我对如何实现 Web API 路由存有疑问。
让我们想象以下场景:
- 你有一个 POCO 类。假设有 100 个属性
- 您需要在不同的平台/UI 中显示该类的列表
即
列表 1 道具 A1 |道具 A2 |道具 A3 |道具 A4
清单 2 提案 A21 |提案 A22 |提案 A23 |提案 A24 |提案 A25 |提案 A26 |提案 A27 |提案 A28 |
我将它称为公司,因为有很多使用这个类名的例子
这样实现Web API + DTOs策略是否正确?
类是:
- 公司(POCO 类)
- CompanyDetailDTO
- CompanyLightListDTO
- CompanyMediumListDTO
例子:
public class CompaniesController : ApiController
{
private MultiTierWebApiContext db = new MultiTierWebApiContext();
private static readonly Expression<Func<Company, CompanyDetailDTO>> AsCompanyDetailDTO =
x => new CompanyDetailDTO
{
Name = x.Name,
Email = x.Email,
isCustomer = x.isCustomer,
isSupplier = x.isSupplier,
Id = x.Id
};
private static readonly Expression<Func<Company, CompanyMediumListDTO>> AsCompanyMediumListDTO =
x => new CompanyMediumListDTO
{
Name = x.Name,
Email = x.Email,
Id = x.Id
};
private static readonly Expression<Func<Company, CompanyLightListDTO>> AsCompanyLightListDTO =
x => new CompanyLightListDTO
{
Name = x.Name,
Id = x.Id
};
// GET: api/Companies/LightList
[Route("api/Companies/LightList")] **It works, but is this a correct way to do it?**
[ResponseType(typeof(CompanyLightListDTO))]
public IQueryable<CompanyLightListDTO>GetCompaniesLightList()
{
return db.Companies.Select(AsCompanyLightListDTO); // default
}
// GET: api/Companies/MediumList
[Route("api/Companies/MediumList")]
[ResponseType(typeof(CompanyMediumListDTO))]
public IQueryable<CompanyMediumListDTO> GetCompaniesMediumList()
{
return db.Companies.Select(AsCompanyMediumListDTO); // default
}
// remaining code removed for simplicity
}
提前感谢您的进一步帮助。
【问题讨论】:
标签: asp.net-mvc asp.net-web-api asp.net-web-api2 dto asp.net-web-api-routing