2012-06-04 2 views
3

금요일에 RC 이전 버전 인 nuget.org의 ASP.NET 웹 API 릴리스에서 myget.org의 야간 빌드로 업그레이드되었습니다. 예상대로 많은 변경 사항이 있었고 그 중 하나는 해결할 수없는 것으로 보입니다. 우리는 액션을 통해 객체를 반환하고 상태 코드를 201 Created로 설정하는 시나리오가 있습니다. 이것은 아주 쉽게 전에 이루어졌다 (컴파일하지 않을 수 있습니다 - 내 머리의 상단에서 개념 코드) :개체 및 컨트롤 상태 코드 반환

Session session = GetSessionInfo(requestMessage); 
var response = new HttpResonseMessage(HttpStatusCode.Created); 
response.Content = response.CreateContent(session); 
return response; 

CreateContent 실제로 ObjectContent의 내부 생성자를 호출 System.Net.Http.HttpResponseMessageExtensions에 위치한 확장 방법이었다. 새 릴리스에서는 HttpResponseMessageExtensions가 새 릴리스에서 사라진 것처럼 보이며 ObjectContent의 내부 생성자도 마찬가지입니다. 지금은 내가 ObjectContent 생성자를 호출해야합니다 것, 그리고 다음은 우리의 필요에 가장 적합한 것 같다 : 내가의 논리에 내용 협상을 혼합, 그것으로 MediaTypeFormatter을 통과 할 것으로 보인다 그러나

public class ObjectContent<T> : ObjectContent 
{ 
    public ObjectContent(T value, MediaTypeFormatter formatter) 
    { 
    } 
} 

동작. 우리의 설정 내용 협상은 일반적이며 컨트롤러와 완전히 분리되어 있습니다.

누구든지 시나리오를 해결하여 개체를 반환하고 응답 상태 코드를 설정하지만 MediaTypeFormatter, 미디어 유형 또는 기타 콘텐츠 협상 관련 내용을 처리 할 필요가없는 제안이 있습니까?

답변

5

ObjectContent<T> 작성 방법을 다시 설계했습니다. RC에서 시작하여 CreateResponse() 확장 메소드 모음 (HttpRequestMessage)을 호출해야합니다. 실제로 내용 협상 된 인스턴스가 ObjectContent<T>HttpResponseMessage의 인스턴스가 생성됩니다. 그래서, 다음과 같습니다.

Session session = GetSessionInfo(requestMessage); 
var response = Request.CreateResponse(HttpStatusCode.Created, session); 
return response; 
+0

감사합니다. @marcind. –