113 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								// Uncomment the following to provide samples for PageResult<T>. Must also add the Microsoft.AspNet.WebApi.OData
							 | 
						||
| 
								 | 
							
								// package to your project.
							 | 
						||
| 
								 | 
							
								////#define Handle_PageResultOfT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.Diagnostics;
							 | 
						||
| 
								 | 
							
								using System.Diagnostics.CodeAnalysis;
							 | 
						||
| 
								 | 
							
								using System.Linq;
							 | 
						||
| 
								 | 
							
								using System.Net.Http.Headers;
							 | 
						||
| 
								 | 
							
								using System.Reflection;
							 | 
						||
| 
								 | 
							
								using System.Web;
							 | 
						||
| 
								 | 
							
								using System.Web.Http;
							 | 
						||
| 
								 | 
							
								#if Handle_PageResultOfT
							 | 
						||
| 
								 | 
							
								using System.Web.Http.OData;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace WebAPI.Areas.HelpPage
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// <summary>
							 | 
						||
| 
								 | 
							
								    /// Use this class to customize the Help Page.
							 | 
						||
| 
								 | 
							
								    /// For example you can set a custom <see cref="System.Web.Http.Description.IDocumentationProvider"/> to supply the documentation
							 | 
						||
| 
								 | 
							
								    /// or you can provide the samples for the requests/responses.
							 | 
						||
| 
								 | 
							
								    /// </summary>
							 | 
						||
| 
								 | 
							
								    public static class HelpPageConfig
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters",
							 | 
						||
| 
								 | 
							
								            MessageId = "WebAPI.Areas.HelpPage.TextSample.#ctor(System.String)",
							 | 
						||
| 
								 | 
							
								            Justification = "End users may choose to merge this string with existing localized resources.")]
							 | 
						||
| 
								 | 
							
								        [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly",
							 | 
						||
| 
								 | 
							
								            MessageId = "bsonspec",
							 | 
						||
| 
								 | 
							
								            Justification = "Part of a URI.")]
							 | 
						||
| 
								 | 
							
								        public static void Register(HttpConfiguration config)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to use the documentation from XML documentation file.
							 | 
						||
| 
								 | 
							
								            config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/bin/WebAPI.xml")));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to use "sample string" as the sample for all actions that have string as the body parameter or return type.
							 | 
						||
| 
								 | 
							
								            //// Also, the string arrays will be used for IEnumerable<string>. The sample objects will be serialized into different media type 
							 | 
						||
| 
								 | 
							
								            //// formats by the available formatters.
							 | 
						||
| 
								 | 
							
								            //config.SetSampleObjects(new Dictionary<Type, object>
							 | 
						||
| 
								 | 
							
								            //{
							 | 
						||
| 
								 | 
							
								            //    {typeof(string), "sample string"},
							 | 
						||
| 
								 | 
							
								            //    {typeof(IEnumerable<string>), new string[]{"sample 1", "sample 2"}}
							 | 
						||
| 
								 | 
							
								            //});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // Extend the following to provide factories for types not handled automatically (those lacking parameterless
							 | 
						||
| 
								 | 
							
								            // constructors) or for which you prefer to use non-default property values. Line below provides a fallback
							 | 
						||
| 
								 | 
							
								            // since automatic handling will fail and GeneratePageResult handles only a single type.
							 | 
						||
| 
								 | 
							
								#if Handle_PageResultOfT
							 | 
						||
| 
								 | 
							
								            config.GetHelpPageSampleGenerator().SampleObjectFactories.Add(GeneratePageResult);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // Extend the following to use a preset object directly as the sample for all actions that support a media
							 | 
						||
| 
								 | 
							
								            // type, regardless of the body parameter or return type. The lines below avoid display of binary content.
							 | 
						||
| 
								 | 
							
								            // The BsonMediaTypeFormatter (if available) is not used to serialize the TextSample object.
							 | 
						||
| 
								 | 
							
								            config.SetSampleForMediaType(
							 | 
						||
| 
								 | 
							
								                new TextSample("Binary JSON content. See http://bsonspec.org for details."),
							 | 
						||
| 
								 | 
							
								                new MediaTypeHeaderValue("application/bson"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to use "[0]=foo&[1]=bar" directly as the sample for all actions that support form URL encoded format
							 | 
						||
| 
								 | 
							
								            //// and have IEnumerable<string> as the body parameter or return type.
							 | 
						||
| 
								 | 
							
								            //config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to use "1234" directly as the request sample for media type "text/plain" on the controller named "Values"
							 | 
						||
| 
								 | 
							
								            //// and action named "Put".
							 | 
						||
| 
								 | 
							
								            //config.SetSampleRequest("1234", new MediaTypeHeaderValue("text/plain"), "Values", "Put");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to use the image on "../images/aspNetHome.png" directly as the response sample for media type "image/png"
							 | 
						||
| 
								 | 
							
								            //// on the controller named "Values" and action named "Get" with parameter "id".
							 | 
						||
| 
								 | 
							
								            //config.SetSampleResponse(new ImageSample("../images/aspNetHome.png"), new MediaTypeHeaderValue("image/png"), "Values", "Get", "id");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to correct the sample request when the action expects an HttpRequestMessage with ObjectContent<string>.
							 | 
						||
| 
								 | 
							
								            //// The sample will be generated as if the controller named "Values" and action named "Get" were having string as the body parameter.
							 | 
						||
| 
								 | 
							
								            //config.SetActualRequestType(typeof(string), "Values", "Get");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            //// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>.
							 | 
						||
| 
								 | 
							
								            //// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string.
							 | 
						||
| 
								 | 
							
								            //config.SetActualResponseType(typeof(string), "Values", "Post");
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if Handle_PageResultOfT
							 | 
						||
| 
								 | 
							
								        private static object GeneratePageResult(HelpPageSampleGenerator sampleGenerator, Type type)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (type.IsGenericType)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                Type openGenericType = type.GetGenericTypeDefinition();
							 | 
						||
| 
								 | 
							
								                if (openGenericType == typeof(PageResult<>))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    // Get the T in PageResult<T>
							 | 
						||
| 
								 | 
							
								                    Type[] typeParameters = type.GetGenericArguments();
							 | 
						||
| 
								 | 
							
								                    Debug.Assert(typeParameters.Length == 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // Create an enumeration to pass as the first parameter to the PageResult<T> constuctor
							 | 
						||
| 
								 | 
							
								                    Type itemsType = typeof(List<>).MakeGenericType(typeParameters);
							 | 
						||
| 
								 | 
							
								                    object items = sampleGenerator.GetSampleObject(itemsType);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // Fill in the other information needed to invoke the PageResult<T> constuctor
							 | 
						||
| 
								 | 
							
								                    Type[] parameterTypes = new Type[] { itemsType, typeof(Uri), typeof(long?), };
							 | 
						||
| 
								 | 
							
								                    object[] parameters = new object[] { items, null, (long)ObjectGenerator.DefaultCollectionSize, };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // Call PageResult(IEnumerable<T> items, Uri nextPageLink, long? count) constructor
							 | 
						||
| 
								 | 
							
								                    ConstructorInfo constructor = type.GetConstructor(parameterTypes);
							 | 
						||
| 
								 | 
							
								                    return constructor.Invoke(parameters);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return null;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |