2014-07-23 4 views
0

CRUD 작업을 포함한 모든 MVC 프로젝트에 기본 컨트롤러와 해당 작업을 지원하는보기 페이지를 사용했습니다.web-API에서 특정 데이터 만 가져 오기

필자의 새로운 임무는 지금까지 올바르게 수행 한 특정 클래스에 대해 몇 가지 API 컨트롤러를 만드는 것이 었습니다.

public class VM{ 
    public int Id { get; set; } 
    public string MacAddress { get; set; } 
    public string IpAddress { get; set; } 
    public DateTime? CreateDate { get; set; } 
    public string PrivateKey { get; set; } 
    public int AppId { get; set; } 
    public int CompanyId { get; set; } 
} 

나는 원하지 않는다 : 문제는 GET 요청이 요청 될 때, 전체 개체 (!하는이 올바른지) 다른 클래스의 모든 연결을 반환하지만이 클래스가 있다고 가정입니다 예를 들어 privateKey를 얻기위한 사용자, 또는 ID. 나는 사용자가 모든 휴식을 취하기를 원하지만 특정 정보는 보내지 말아야한다.

그 목표를 달성하는 가장 좋은 방법은 무엇입니까? 그러한 특정 반원들을 갖지 않는 새로운 반을 만드는 것이 정당한 대답이 될 것입니까? 내일이면 보내지 않을 다른 데이터 멤버를 추가하고 싶습니다. 다른 클래스를 만들어야합니까?

개체를 클라이언트에 보내기 전에 해당 데이터 멤버의 데이터를 변경한다고 가정합니다. 맞습니까?

+1

이를 만듭니다 다른 클래스는 API를 통해 노출 된 다음'VM' 클래스에서 매핑됩니다. –

+0

예, @DavinTryon이 (가) 댓글을 달았 기 때문에 민감한 데이터가없는 새 클래스는 수용 가능한 해결책입니다. 특별한 경우 ViewModels 또는 Wrappers는 기본 Model 클래스와 다를 수 있으므로 걱정하지 마십시오. – Ghukas

+0

"내일"에 관해서는, 하나 더 속성이 적은 수업이 필요하다는 것을 의미합니까? 이전의 수업을 계속해야합니까? – Ghukas

답변

1

null로 설정하면 실제로 올바른 대답이 아닙니다.

그러나 일반적으로 응용 프로그램을 가능한 한 일관성있게 유지하려면 비슷한 요청에 대해 동일한 유형의 필드/개체를 반환해야합니다.

따라서 몇 (2 또는 3) 개의 DTO (데이터 전송 개체)로 충분해야합니다. 프로젝트는 작은 규모입니다, 아니면 그냥 미친 것 같은 느낌이 다음과 같이 당신은 항상 익명 객체로 변환 할 수있는 경우 : 사용자 이름

List<VM> VMs = VMRepo.GetAll(); 
vms.ConvertAll(vm => new {vm.MacAddress, vm.IpAddress}); 

를 심지어 다음 제공 : vms.ConvertAll(vm=> new {MAC= vm.MacAddress, IP= vm.IpAddress});

+0

의견을 보내 주셔서 감사합니다. 너에게 조언을 구할 것이다. – Skatz1990

관련 문제