无法为媒体类型生成样本&application / x-www-form-urlencoded'

时间:2013-04-02 17:52:25

标签: c# asp.net asp.net-web-api

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

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

enter image description here

这是一个POST方法

示例显示适用于application / json和application / xml

我不太确定,但应用程序/ -x-www-form-urlencoded一直显示

我已经搜索了相当多的错误,但无法找到导致此错误的原因

我非常感谢您提供的任何帮助,如果您有任何疑问,请与我们联系。

3 个答案:

答案 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 );
}