You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.5 KiB
39 lines
1.5 KiB
using System;
|
|
using System.Text;
|
|
using System.Web;
|
|
using System.Web.Http.Description;
|
|
|
|
namespace ICSSoft.WebAPI.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();
|
|
}
|
|
}
|
|
}
|