我是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));
给我一个空白部分。
提前致谢!
答案 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);