我最近开始创建一个ASP.net Web API
出于某种原因,在查看自动生成的帮助文档时,我一直收到此错误:
这是一个POST方法
示例显示适用于application / json和application / xml
我不太确定,但应用程序/ -x-www-form-urlencoded一直显示
我已经搜索了相当多的错误,但无法找到导致此错误的原因
我非常感谢您提供的任何帮助,如果您有任何疑问,请与我们联系。
答案 0 :(得分: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>));
答案 1 :(得分:7)
答案帮助了我,但我厌倦了为系统没有知道的每种类型编写一个例子......我最终做的是这个
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);
}
有人可以聪明并扩展它,以便根据属性类型输入默认值,但这对我来说已经足够了。
答案 2 :(得分: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 );
}