我最近开始创建一个 ASP.net Web API
出于某种原因,我在查看自动生成的帮助文档时不断收到此错误:
这是一个 POST 方法
示例对于 application/json 和 application/xml 显示良好
我不太确定,但 application/-x-www-form-urlencoded 不断出现
我已经用谷歌搜索了很多错误,但找不到可能导致此错误的原因
我非常感谢可以提供的任何帮助,如果您有任何问题,请告诉我。
我最近开始创建一个 ASP.net Web API
出于某种原因,我在查看自动生成的帮助文档时不断收到此错误:
这是一个 POST 方法
示例对于 application/json 和 application/xml 显示良好
我不太确定,但 application/-x-www-form-urlencoded 不断出现
我已经用谷歌搜索了很多错误,但找不到可能导致此错误的原因
我非常感谢可以提供的任何帮助,如果您有任何问题,请告诉我。
这是预期的行为。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>));
答案帮助了我,但我厌倦了为系统不知道的每种类型编写一个示例......我最终做的是这个
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);
}
有人可以变得聪明并对其进行扩展,以便它根据属性类型输入默认值,但这对于我的目的来说已经足够了。
我意识到我参加聚会迟到了...
借鉴@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 );
}