Подтвердить что ты не робот

Исключить образец медиа-типа из справочной страницы веб-API

Я новичок в использовании веб-API, и проблема, с которой я борюсь с проблемой, я не могу найти решение. Обычная проблема заключается в том, что вместо образца типа media/application-x-www-form-urlencoded люди получают

Не удалось создать образец для типа носителя "application/x-www-form-urlencoded". Невозможно использовать formatter 'FormUrlEncodedMediaTypeFormatterTracer' для записи типа "Задача".

Общее предложение состоит в том, чтобы указать собственный образец в файле Config, но мне интересно, могу ли я удалить этот раздел справки типа медиа?

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

Дает мне пустой раздел.

Спасибо заранее!

4b9b3361

Ответ 1

  • Могу ли я спросить, почему вы хотите удалить этот раздел? Как вы не хотите поддерживать formurlencoded formatter в своем сервисе? если да, то вы можете удалить сам форматировщик из коллекции форматировщиков, и в этом случае этот раздел не будет отображаться.

    config.Formatters.Clear();
    config.Formatters.Add(new JsonMediaTypeFormatter());
    config.Formatters.Add(new XmlMediaTypeFormatter());  
    
  • В качестве альтернативы вы можете сделать следующее изменение (highlighed comments) в файле в 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 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 --------------------------------------
    

Ответ 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);