39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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();
 | |
|         }
 | |
|     }
 | |
| } |