コード例 #1
0
        private static HttpResponseMessage CreateResponsibleMessage <T>(HttpRequestMessage request,
                                                                        HttpStatusCode httpStatusCode, List <string> messages, T value)
        {
            if (messages == null)
            {
                messages = new List <string>();
            }

            HttpResponseMessage responseMessage;
            var acceptsXml  = request.AcceptsXml();
            var acceptsJson = request.AcceptsJSon();

            if (request.IsResponsibleRequest())
            {
                MultipartContent content;
                if (acceptsXml)
                {
                    content = new MultipartContent
                    {
                        new ObjectContent <List <ServiceMessage> >(
                            messages.Select(m => new ServiceMessage {
                            Message = m
                        }).ToList(),
                            new XmlMediaTypeFormatter())
                    };
                }
                else
                {
                    content = new MultipartContent
                    {
                        new ObjectContent <List <ServiceMessage> >(
                            messages.Select(m => new ServiceMessage {
                            Message = m
                        }).ToList(),
                            new JsonMediaTypeFormatter())
                    };
                }

                if (value != null && value is Stream)
                {
                    var streamContent = value as Stream;
                    content.Add(new StreamContent(streamContent));
                }
                else if (value != null && value is byte[])
                {
                    var bytes = value as byte[];
                    content.Add(new ByteArrayContent(bytes));
                }
                else
                {
                    if (value != null)
                    {
                        content.Add(acceptsXml
                            ? new ObjectContent <T>(value, new XmlMediaTypeFormatter())
                            : new ObjectContent <T>(value, new JsonMediaTypeFormatter()));
                    }
                }

                responseMessage         = request.CreateResponse(httpStatusCode);
                responseMessage.Content = content;
                responseMessage.Content.Headers.Add(nameof(StaticResources.ResponsibleMediaType),
                                                    StaticResources.ResponsibleMediaType);
                return(responseMessage);
            }

            if (value != null)
            {
                if (acceptsXml)
                {
                    responseMessage = request.CreateResponse(httpStatusCode, value, new XmlMediaTypeFormatter());
                }
                else if (acceptsJson)
                {
                    responseMessage = request.CreateResponse(httpStatusCode, value, new JsonMediaTypeFormatter());
                }
                else
                {
                    responseMessage = request.CreateResponse(httpStatusCode, value);
                }
            }
            else
            {
                responseMessage = request.CreateResponse(httpStatusCode);
            }

            return(responseMessage);
        }