2012-10-03 2 views
1

내가 이전에 다음 코드를 제대로 작동 내 웹 API 컨트롤러를 한 결과. JSON 루프 오류가 발생했습니다. 그래서 컨트롤러에서 반환해야하는 필드 만 선택하기로 결정했습니다. 다음은 코드의 예입니다.MVC 4 웹 API 중 하나로, OData 이상한

[Queryable(ResultLimit = 30)] 
    public IQueryable<dynamic> Get() 
    { 
     return _db.Leads.Select(x => new 
            { 
             x.FirstName, 
             x.LeadTypeID, 
             x.DateSent 
            }).AsQueryable(); 
    } 

응용 프로그램이나 터미널을 통해 API를 호출 할 때 결과가 올바르게 반환됩니다. 그러나 브라우저 (Chrome)에 URL을 붙여 넣으면 서버 500 오류가 발생합니다. JSON 오류와 반대로 XML 추측. 그것은 관계를 추가하기 전에 작동했습니다. 이전 호를 해결하고 싶지만 중요하지 않습니다. 우려되는 부분은 데이터가 반환되지만 OData 필터는 무시된다는 것입니다.

귀하의 도움을 많이 주시면 감사하겠습니다.

답변

1

내장 된 XML 직렬 변환기는 익명 형식을 지원하지 않으므로 런타임 예외가 발생합니다. 이 문제를 해결할 수있는 3 가지 방법이 있습니다.

  1. 익명 형식 대신 사용자 지정 POCO를 반환하십시오.
  2. XML serializer를 제거하고 응용 프로그램에서 항상 JSON을 반환하도록 할 수 있습니다. serializer를 비활성화하려면 global.asax.cs 파일의 Application_Start() 메서드에 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();을 추가하십시오.
  3. 익명 형식을 지원하는 다른 XML serializer를 선택할 수 있습니다. 내가 손을 뗄 수는 없지만 몇 가지 밖에있을 것입니다.
+0

고맙습니다. 말이된다. 내 OData 필터가 무시되는 이유는 무엇입니까? 생성되는 SQL을 살펴보고 필터가 무시되고 있음을 확인할 수 있습니다. – TYRONEMICHAEL

+0

익명 형식을 사용하는 대신 강력하게 형식화 된 POCO를 빠르게 만들 수 있습니다. Queryable 특성이 동적 및 익명 형식을 지원하는지 확신하지 못합니다. –

+0

사실 완전히 새로운 프로젝트를 시작해야했습니다. 나는 웹 아파치 베타 dll로 일하고 있다고 생각한다. – TYRONEMICHAEL

관련 문제