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(); }