从Web API帮助页面中排除媒体类型示例

时间:2013-08-15 08:55:36

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

我是Web API使用的新手,而我遇到问题的问题我无法找到解决方案。 常见的问题是,当人们得到

代替application / x-www-form-urlencoded媒体类型样本时
  

无法为媒体类型'application / x-www-form-urlencoded'生成样本。不能使用格式化程序'FormUrlEncodedMediaTypeFormatterTracer'来写'Task'类型。

常见的建议是在Config文件中指定自己的示例,但我想知道,我可以删除此媒体类型的帮助部分吗?

config.SetSampleForType("", new MediaTypeHeaderValue("application/x-www-form-urlencoded"), typeof(object));

给我一​​个空白部分。

提前致谢!

2 个答案:

答案 0 :(得分:51)

  • 请问您为什么要删除此部分?就像你不想在你的服务中支持formurlencoded formatter?如果是,那么您可以从格式化程序集合中删除格式化程序本身,在这种情况下,此部分不会显示。

    config.Formatters.Clear();
    config.Formatters.Add(new JsonMediaTypeFormatter());
    config.Formatters.Add(new XmlMediaTypeFormatter());  
    
  • 或者,您可以在Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs的文件中执行以下更改(高亮度注释)并执行以下操作,即过滤掉格式化程序:

        // Do the sample generation based on formatters only if an action doesn't return an HttpResponseMessage.
        // Here we cannot rely on formatters because we don't know what's in the HttpResponseMessage, it might not even use formatters.
        if (type != null && !typeof(HttpResponseMessage).IsAssignableFrom(type))
        {
            object sampleObject = GetSampleObject(type);
    
            // Change Begin --------------------------------------
            IEnumerable<MediaTypeFormatter> filteredFormatters = formatters.Where(frmtr => frmtr.GetType() != typeof(JQueryMvcFormUrlEncodedFormatter));
    
            foreach (var formatter in filteredFormatters)
            {
    
            // Change End --------------------------------------
    

答案 1 :(得分:1)

如果要删除特定格式类型,请使用以下代码:

            var matches = config.Formatters
                            .Where(f => f.SupportedMediaTypes
                                         .Where(m => m.MediaType.ToString() == "application/xml" ||
                                                     m.MediaType.ToString() == "text/xml" ||
                                                     m.MediaType.ToString() == "application/x-www-form-urlencoded")

                                         .Count() > 0)
                            .ToList();
        foreach (var match in matches)
            config.Formatters.Remove(match);