namespace Test.HttpClient{
internal class RoutePaths {
public string Route { get; private set; }
private RoutePaths(string route){
public static RoutePaths ProductsRoute { get { return new RoutePaths("/products"); } }
public static RoutePaths ProductRoute(string productId) => new RoutePaths("/products" + "/" + productId);
public static RoutePaths SkusRoute { get { return new RoutePaths("/skus"); } }
public string BuildRoute(bool isProd){
string routeVersion = isProd ? RouteVersions.ProdRoute.Version : RouteVersions.StagRoute.Version;
return routeVersion+Route;
internal class RouteVersions {
public string Version { get; private set; }
private RouteVersions(string version){
public static RouteVersions ProdRoute { get { return new RouteVersions("/v1"); } }
public static RouteVersions StagRoute { get { return new RouteVersions("/v0"); } }
public string CreateProductsAsync(bool isProd){
return RoutePaths.ProductsRoute.BuildRoute(isProd);
public string CreateProductAsync(bool isProd){
return RoutePaths.ProductRoute("12").BuildRoute(isProd);
public static void Main()
Test.HttpClient.HttpClient http = new Test.HttpClient.HttpClient();
Console.WriteLine(http.CreateProductsAsync(isProd));
Console.WriteLine(http.CreateProductAsync(isProd));