asp.net 无法产生媒介类型'application/x-www-form-urlencoded'的范例

ac1kyiln  于 2022-11-26  发布在  .NET
关注(0)|答案(4)|浏览(191)

我最近开始创建ASP.net Web API
由于某种原因,我在查看自动生成的帮助文档时不断收到此错误:

这适用于POST方法
对于application/json和application/xml,示例显示良好
我不太确定,但应用程序/-x-www-form-urlencoded一直显示
我在Google上搜索了很多错误,但找不到可能导致此错误的原因
我真的很感谢任何帮助,可以提供,也请让我知道,如果你有任何问题。

kx5bkwkv

kx5bkwkv1#

这是预期的行为。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>));
eqoofvh9

eqoofvh92#

答案帮了我的忙,但是我厌倦了为系统不知道的每种类型写一个例子......我最后做的是这样的

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

有些人可以变聪明,扩展它,使它根据属性类型放入默认值,但这对我的目的来说已经足够了。

x8diyxa7

x8diyxa73#

我知道我迟到了...
借用@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 );
}
cuxqih21

cuxqih214#

回答Adveen https://stackoverflow.com/a/35607342/20446686,而不是像脚本Type[] types = { typeof(MyType),typeof(AnotherType),add more here }中那样手动添加类型;我们可以通过以下方式动态添加类型

类型[]类型=汇编.获取执行汇编().获取类型();

Areas\HelpPage\App_Start\HelpPageConfig.cs

uncomment
config.SetSampleForType("[0]=foo&[1]=bar", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(IEnumerable<string>));

Type[] types = Assembly.GetExecutingAssembly().GetTypes();

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

相关问题