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
8 months ago
|
using System;
|
||
|
using System.Text;
|
||
|
using System.Web;
|
||
|
using System.Web.Http.Description;
|
||
|
|
||
|
namespace 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();
|
||
|
}
|
||
|
}
|
||
|
}
|