28

我是 Web API 使用的新手,我正在努力解决我找不到解决方案的问题。常见的问题是,当人们得到的不是 application/x-www-form-urlencoded 媒体类型样本时

无法为媒体类型“application/x-www-form-urlencoded”生成样本。无法使用格式化程序“FormUrlEncodedMediaTypeFormatterTracer”写入类型“任务”。

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

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

给我一个空的部分。

提前致谢!

4

2 回答 2

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

    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 --------------------------------------
    
于 2013-08-15T17:58:00.033 回答
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);
于 2017-04-11T07:57:55.163 回答