对比新文件 |
| | |
| | | // 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 IStation.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 = "IStation.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("~/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 |
| | | } |
| | | } |