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 RMDataManager.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 = "RMDataManager.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("~/App_Data/XmlDocument.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
|
||
|
}
|
||
|
}
|