2013-08-15 24 views
25

Tôi là người mới sử dụng API Web và vấn đề tôi đang gặp phải với sự cố mà tôi không thể tìm thấy giải pháp. vấn đề chung là, khi thay vì application/x-www-form-urlencoded loại phương tiện mẫu, người taLoại trừ mẫu loại phương tiện khỏi trang trợ giúp API Web

Không thể tạo ra các mẫu cho loại phương tiện truyền thông 'application/x-www-form-urlencoded'. Không thể sử dụng trình định dạng 'FormUrlEncodedMediaTypeFormatterTracer' để viết loại 'Tác vụ'.

Đề xuất chung là chỉ định mẫu riêng trong tệp Config, nhưng tôi tự hỏi, tôi có thể xóa phần trợ giúp loại phương tiện này không?

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

Cung cấp cho tôi phần trống.

Cảm ơn trước!

Trả lời

48
  • Tôi có thể hỏi tại sao bạn muốn xóa phần này không? Giống như bạn không muốn hỗ trợ định dạng formurlencoded trong dịch vụ của bạn? nếu có, thì bạn có thể loại bỏ trình định dạng khỏi bộ sưu tập các trình định dạng, trong trường hợp này phần này sẽ không hiển thị.

    config.Formatters.Clear(); 
    config.Formatters.Add(new JsonMediaTypeFormatter()); 
    config.Formatters.Add(new XmlMediaTypeFormatter()); 
    
  • Ngoài ra, bạn có thể thực hiện sự thay đổi sau (bình luận highlighed) trong file tại Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs và làm như sau, mà là để lọc ra các trình định dạng:

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

Cảm ơn câu trả lời của bạn! Bạn nói đúng, tôi muốn loại trừ sự hỗ trợ của trình định dạng này, bởi vì tôi đang hoạt động với các đối tượng có cấu trúc lớn và sẽ là một cơn ác mộng để soạn chúng thành urlencoded. Trên thực tế, tôi đã cố gắng loại bỏ trình định dạng khỏi danh sách trình định dạng (lỗi của tôi, tôi không nói câu hỏi đó), nhưng nó không ảnh hưởng đến việc tạo phần. –

+2

Tôi đã sai, tôi đã cố gắng để loại bỏ định dạng như thế này: 'var formatter = _config.Formatters.FormUrlEncodedFormatter; _config.Formatters.Remove (định dạng); ' Mã của bạn hoạt động như mong đợi! Cảm ơn! –

+0

Biến cấu hình này là tham chiếu đến cấu hình chung, điều đó có ảnh hưởng đến các khu vực khác của ứng dụng không? –

0

Nếu bạn muốn xóa loại định dạng cụ thể sử dụng mã này:

  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); 
Các vấn đề liên quan