laatzen/Common/Service/MeterProcessState/Areas/HelpPage/ApiDescriptionExtensions.cs
2022-10-19 12:58:08 +02:00

39 lines
1.5 KiB
C#

using System;
using System.Text;
using System.Web;
using System.Web.Http.Description;
namespace Service.MeterProcessState.Areas.HelpPage
{
public static class ApiDescriptionExtensions
{
/// <summary>
/// Generates an URI-friendly ID for the <see cref="ApiDescription"/>. E.g. "Get-Values-id_name" instead of "GetValues/{id}?name={name}"
/// </summary>
/// <param name="description">The <see cref="ApiDescription"/>.</param>
/// <returns>The ID as a string.</returns>
public static String GetFriendlyId(this ApiDescription description)
{
String path = description.RelativePath;
String[] urlParts = path.Split('?');
String localPath = urlParts[0];
String queryKeyString = null;
if (urlParts.Length > 1)
{
String query = urlParts[1];
String[] queryKeys = HttpUtility.ParseQueryString(query).AllKeys;
queryKeyString = string.Join("_", queryKeys);
}
StringBuilder friendlyPath = new StringBuilder();
friendlyPath.AppendFormat("{0}-{1}",
description.HttpMethod.Method,
localPath.Replace("/", "-").Replace("{", string.Empty).Replace("}", string.Empty));
if (queryKeyString != null)
{
friendlyPath.AppendFormat("_{0}", queryKeyString.Replace('.', '-'));
}
return friendlyPath.ToString();
}
}
}