【问题标题】:Exclude media-type sample from Web API help page从 Web API 帮助页面中排除媒体类型示例
【发布时间】:2023-03-06 14:39:02
【问题描述】:

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

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

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

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

给我一​​个空白部分。

提前致谢!

【问题讨论】:

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


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

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

          // 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 --------------------------------------
      

    【讨论】:

    • 感谢您的回答!你是对的,我想排除对这个格式化程序的支持,因为我正在使用大型结构化对象,将它们组合为 urlencoded 将是一场噩梦。实际上,我已经尝试从格式化程序列表中删除格式化程序(我的错,我没有告诉这个问题),但这不会影响部分的生成。
    • 我错了,我试图像这样删除格式化程序:var formatter = _config.Formatters.FormUrlEncodedFormatter; _config.Formatters.Remove(format); 您的代码按预期工作!谢谢!
    • 这个配置变量是对全局配置的引用,会不会影响应用的其他区域?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多