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

998*_*823 29 c# asp.net asp.net-web-api

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

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

在此输入图像描述

这是一个POST方法

样本显示适用于application/json和application/xml

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

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

我非常感谢您提供的任何帮助,如果您有任何疑问,请告诉我.

Kir*_*lla 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>));
Run Code Online (Sandbox Code Playgroud)

  • 如果你问我 - 这是完全出乎意料的行为.如果帮助页面无法生成这些样本,为什么要显示此类请求?有没有办法禁用它? (6认同)
  • 在web.config中设置`debug ="false"将阻止显示错误并显示"Sample not available".代替. (4认同)

Adw*_*een 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);            
}
Run Code Online (Sandbox Code Playgroud)

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