예제 #1
0
 internal static string ToUrl(this object value, Uri serviceAddress, string operationType, bool responseRequired = true)
 {
     var builder = new UriBuilder(serviceAddress);
     switch (operationType)
     {
         case OperationType.Post:
             builder = (responseRequired
                 ? builder.AddPath(RestServiceMetadata.Path.PostWithResponse)
                 : builder.AddPath(RestServiceMetadata.Path.Post))
                 .AddQuery(UrlSerializer.FromType(value.GetType()).QueryParams);
             break;
         case OperationType.Put:
             builder = (responseRequired
                 ? builder.AddPath(RestServiceMetadata.Path.PutWithResponse)
                 : builder.AddPath(RestServiceMetadata.Path.Put))
                 .AddQuery(UrlSerializer.FromType(value.GetType()).QueryParams);
             break;
         case OperationType.Get:
             builder = (responseRequired
                 ? builder.AddPath(RestServiceMetadata.Path.GetWithResponse)
                 : builder.AddPath(RestServiceMetadata.Path.Get))
                 .AddQuery(UrlSerializer.FromValue(value).QueryParams);
             break;
         case OperationType.Delete:
             builder = (responseRequired
                 ? builder.AddPath(RestServiceMetadata.Path.DeleteWithResponse)
                 : builder.AddPath(RestServiceMetadata.Path.Delete))
                 .AddQuery(UrlSerializer.FromValue(value).QueryParams);
             break;
         default:
             string errorMessage = string.Format(
                 "OperationType {0} with void return is absent", operationType);
             throw Error.InvalidOperation(errorMessage);
     }
     return builder.Uri.ToString();
 }