[C#] HttpResponseMessage 객체에 내용을 넣습니까?

몇 달 전에 Microsoft는 HttpResponseMessage 클래스를 변경하기로 결정했습니다. 이전에는 데이터 형식을 생성자에 전달한 다음 해당 데이터가 포함 된 메시지를 더 이상 반환 할 수 없었습니다.

이제 Content 속성을 사용하여 메시지의 내용을 설정해야합니다. 문제는 HttpContent 유형이며 문자열을 HttpContent로 변환하는 방법을 찾지 못하는 것입니다.

누구 든지이 문제를 해결하는 방법을 알고 있습니까? 고마워



답변

구체적으로 문자열의 경우 가장 빠른 방법은 StringContent 생성자 를 사용하는 것입니다

response.Content = new StringContent("Your response text");

다른 일반적인 시나리오에 대한 추가 HttpContent 클래스 하위 항목 이 많이 있습니다.


답변

Request.CreateResponse를 사용하여 응답을 작성해야합니다 .

HttpResponseMessage response =  Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");

문자열뿐만 아니라 객체를 CreateResponse에 전달할 수 있으며 요청의 Accept 헤더에 따라 객체를 직렬화합니다. 이렇게하면 포맷터를 수동으로 선택하지 않아도됩니다.


답변

분명히 새로운 방법은 다음과 같습니다.

http://aspnetwebstack.codeplex.com/discussions/350492

헨릭을 인용하자면

HttpResponseMessage response = new HttpResponseMessage();

response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");

따라서 기본적으로 ObjectContent 유형을 작성해야하며 HttpContent 객체로 반환 될 수 있습니다.


답변

가장 쉬운 단선 솔루션은

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( "Your message here" ) };

직렬화 된 JSON 컨텐츠의 경우 :

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( SerializedString, System.Text.Encoding.UTF8, "application/json" ) };


답변

모든 T 객체에 대해 다음을 수행 할 수 있습니다.

return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);


답변

고유 한 특수 컨텐츠 유형을 작성할 수 있습니다. 예를 들어 Json 컨텐츠와 Xml 컨텐츠를위한 것 (HttpResponseMessage.Content에 할당) :

public class JsonContent : StringContent
{
    public JsonContent(string content)
        : this(content, Encoding.UTF8)
    {
    }

    public JsonContent(string content, Encoding encoding)
        : base(content, encoding, "application/json")
    {
    }
}

public class XmlContent : StringContent
{
    public XmlContent(string content)
        : this(content, Encoding.UTF8)
    {
    }

    public XmlContent(string content, Encoding encoding)
        : base(content, encoding, "application/xml")
    {
    }
}


답변

Simon Mattes의 답변에서 영감을 얻은 IHttpActionResult 필수 반환 유형의 ResponseMessageResult를 충족해야했습니다. 또한 nashawn의 JsonContent를 사용하여 결국 …

        return new System.Web.Http.Results.ResponseMessageResult(
            new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK)
            {
                Content = new JsonContent(JsonConvert.SerializeObject(contact, Formatting.Indented))
            });

JsonContent에 대한 nashawn의 답변을 참조하십시오.