30

我最近开始创建一个 ASP.net Web API

出于某种原因,我在查看自动生成的帮助文档时不断收到此错误:

在此处输入图像描述

这是一个 POST 方法

示例对于 application/json 和 application/xml 显示良好

我不太确定,但 application/-x-www-form-urlencoded 不断出现

我已经用谷歌搜索了很多错误,但找不到可能导致此错误的原因

我非常感谢可以提供的任何帮助,如果您有任何问题,请告诉我。

4

3 回答 3

21

这是预期的行为。HelpPage 示例生成使用 HttpConfiguration 上的实际格式化程序来“写入”示例对象。FormUrlEncodedMediaTypeFormatter 无法“写入”任何类型,因此 HelpPage 无法为其生成样本。作为一种解决方法,您可以显式提供特定类型的示例(如 Areas\HelpPage\App_Start\HelpPageConfig.cs 的注释代码中所示)。

config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));
于 2013-04-02T21:44:07.097 回答
8

答案帮助了我,但我厌倦了为系统不知道的每种类型编写一个示例......我最终做的是这个

Type[] types = { typeof(MyType), typeof(AnotherType), *add more here* };

foreach(Type t in types)
{
    List<string> propExample = new List<string>();
    foreach(var p in t.GetProperties())
    {
        propExample.Add(p.Name + "=value");
    }

    config.SetSampleForType(string.Join("&", propExample), new MediaTypeHeaderValue("application/x-www-form-urlencoded"), t);            
}

有人可以变得聪明并对其进行扩展,以便它根据属性类型输入默认值,但这对于我的目的来说已经足够了。

于 2016-02-24T16:17:12.543 回答
0

我意识到我参加聚会迟到了...

借鉴@Adween 的答案并尝试应对挑战。

“有人可以变得聪明并扩展它,以便它根据属性类型放入默认值......”

我尝试为参数插入样本值。我不喜欢我必须对示例值进行 URLEndcode,但我更喜欢输出。

foreach ( Type t in new Type[] { typeof( MyType ) } )
{
    List<string> propExample = new List<string>();
    foreach ( var p in t.GetProperties() )
    {
        propExample.Add( p.Name + "=" + HttpUtility.UrlEncode( config.GetHelpPageSampleGenerator().GetSampleObject(p.PropertyType).ToString() ) );
    }

    config.SetSampleForType( string.Join( "&", propExample ), new MediaTypeHeaderValue( "application/x-www-form-urlencoded" ), t );
}
于 2019-12-05T15:05:04.107 回答