Describes a response with an multiple objects.
Inheritance: ResponseInfo
コード例 #1
0
        private ResponseInfo CreateFakeResponseInfo(RequestInfo fakeRequest, IEnumerable <string> contentType, params object[] bodyArguments)
        {
            ResponseInfo         result;
            IEnumerable <string> currentContentType;

            if (bodyArguments.Length == 1)
            {
                var singleResponse = ObjectResponseInfo <object> .CreateInstance(Encoding.UTF8, fakeRequest, bodyArguments[0].GetType(), bodyArguments[0], _converterProvider);

                currentContentType = (singleResponse.Headers[Header.ContentType] == null ? new string[0] :
                                      new[] { singleResponse.Headers[Header.ContentType].Values.Select(item => item.Value).First() });
                result = singleResponse;
            }
            else
            {
                var multiResponse = new MultiObjectResponseInfo(Encoding.UTF8, fakeRequest, bodyArguments, _converterProvider);
                currentContentType = multiResponse.ObjectResponses.Select(item => item.Headers[Header.ContentType].Values.Select(value => value.Value).First())
                                     .Where(item => !String.IsNullOrEmpty(item));
                result = multiResponse;
            }

            if ((contentType.Any()) && (currentContentType.Join(contentType, outer => outer, inner => inner, (outer, inner) => inner).Count() != currentContentType.Count()))
            {
                throw new WebException("Unsupported media type", WebExceptionStatus.ProtocolError);
            }

            return(result);
        }
コード例 #2
0
 public void Setup()
 {
     (_converterProvider = new Mock<IConverterProvider>(MockBehavior.Strict)).Setup(instance => instance.FindBestOutputConverter<string>(It.IsAny<IResponseInfo>()))
         .Returns<IResponseInfo>(response => _converter.Object);
     _converterProvider.Setup(instance => instance.FindBestOutputConverter<int>(It.IsAny<IResponseInfo>()))
         .Returns<IResponseInfo>(response => _converter.Object);
     (_converter = new Mock<IConverter>(MockBehavior.Strict)).Setup(instance => instance.CanConvertFrom<string>(It.IsAny<IResponseInfo>()))
         .Returns<IResponseInfo>(response => CompatibilityLevel.ExactMatch);
     _converter.Setup(instance => instance.ConvertFrom(StringBody, It.IsAny<IResponseInfo>()))
         .Callback<string, IResponseInfo>((body, response) =>
         {
             response.Headers["Content-Type"] = "text/plain";
             using (var writer = new StreamWriter(response.Body))
             {
                 writer.Write(body);
                 writer.Flush();
             }
         });
     _converter.Setup(instance => instance.ConvertFrom(NumericBody, It.IsAny<IResponseInfo>()))
         .Callback<int, IResponseInfo>((body, response) =>
         {
             response.Headers["Content-Type"] = "text/plain";
             using (var writer = new StreamWriter(response.Body))
             {
                 writer.Write(body);
                 writer.Flush();
             }
         });
     _request = new RequestInfo(Verb.GET, (HttpUrl)UrlParser.Parse("http://temp.org/"), new MemoryStream(), new BasicClaimBasedIdentity());
     _response = new MultiObjectResponseInfo(_request, new object[] { StringBody, NumericBody }, _converterProvider.Object);
 }
コード例 #3
0
        private ResponseInfo MakeResponse(IRequestMapping requestMapping, IList <object> resultingValues)
        {
            ResponseInfo result       = (ResponseInfo)requestMapping.Target.Response;
            var          bodyValues   = new List <KeyValuePair <ResultInfo, object> >();
            var          headerValues = new List <KeyValuePair <ResultInfo, object> >();

            requestMapping.Operation.Results.ForEach((resultValue, index) =>
                                                     (resultValue.Target is ToHeaderAttribute ? headerValues : bodyValues).Add(new KeyValuePair <ResultInfo, object>(resultValue, resultingValues[index])));

            switch (bodyValues.Count)
            {
            case 0:
                break;

            case 1:
                var bodyValue = bodyValues[0];
                result = ObjectResponseInfo <object> .CreateInstance(result.Encoding, result.Request, bodyValue.Value.GetType(), bodyValue.Value, _converterProvider, result.Headers);

                break;

            default:
                result = new MultiObjectResponseInfo(result.Encoding, result.Request, bodyValues.Select(item => item.Value), _converterProvider, result.Headers);
                break;
            }

            headerValues.ForEach(value => result.Headers.Add(new Header(
                                                                 ((ToHeaderAttribute)value.Key.Target).Name,
                                                                 String.Format(((ToHeaderAttribute)value.Key.Target).Format, _converterProvider.ConvertFrom(value.Value)))));
            return(result);
        }
コード例 #4
0
ファイル: ResponseComposer.cs プロジェクト: alien-mcl/URSA
        private ResponseInfo MakeResponse(IRequestMapping requestMapping, IList<object> resultingValues)
        {
            ResponseInfo result = (ResponseInfo)requestMapping.Target.Response;
            var bodyValues = new List<KeyValuePair<ResultInfo, object>>();
            var headerValues = new List<KeyValuePair<ResultInfo, object>>();
            requestMapping.Operation.Results.ForEach((resultValue, index) =>
                (resultValue.Target is ToHeaderAttribute ? headerValues : bodyValues).Add(new KeyValuePair<ResultInfo, object>(resultValue, resultingValues[index])));

            switch (bodyValues.Count)
            {
                case 0:
                    break;
                case 1:
                    var bodyValue = bodyValues[0];
                    result = ObjectResponseInfo<object>.CreateInstance(result.Encoding, result.Request, bodyValue.Value.GetType(), bodyValue.Value, _converterProvider, result.Headers);
                    break;
                default:
                    result = new MultiObjectResponseInfo(result.Encoding, result.Request, bodyValues.Select(item => item.Value), _converterProvider, result.Headers);
                    break;
            }

            headerValues.ForEach(value => result.Headers.Add(new Header(
                ((ToHeaderAttribute)value.Key.Target).Name,
                String.Format(((ToHeaderAttribute)value.Key.Target).Format, _converterProvider.ConvertFrom(value.Value)))));
            return result;
        }