2013-08-15 8 views
25

私はWeb APIの使用法で初心者ですが、問題を解決するために苦労している問題です。とき代わりに、アプリケーション/ x-www-form-urlencodedでメディアタイプのサンプルの 一般的な問題は、人々がWeb APIのヘルプページからメディアタイプのサンプルを除外します

は、メディアタイプ 'アプリケーション/ x-www-form-urlencodedで' のサンプルの生成に失敗しました取得されています。 Formatter 'FormUrlEncodedMediaTypeFormatterTracer'を使用して、タイプ 'Task'を書き込むことはできません。

よくあるご提案は、設定ファイルに独自のサンプルを指定することですが、私はこのメディアタイプのヘルプセクションを削除できますか?

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

空のセクションが表示されます。

ありがとうございます!

答えて

48
  • このセクションを削除する理由は何ですか?あなたのサービスにformurlencodedフォーマッタをサポートしたくないのですか?そうであれば、フォーマッタのコレクションからフォーマッタ自体を削除することができます。この場合、このセクションは表示されません。

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

ありがとうございました!そうです、私は大規模な構造化オブジェクトで動作しているので、このフォーマッタのサポートを除外したいのですが、urlencodedとしてそれらを構成するのは悪夢です。 実際には、フォーマッタリストからフォーマッタを削除しようとしましたが(私のせいで、私はそれについて言わなかった)、セクション生成には影響しません。 –

+2

私は間違っていましたが、私はこのようなフォーマッタを削除しようとしました: 'var formatter = _config.Formatters.FormUrlEncodedFormatter; _config.Formatters.Remove(形式); ' コードは期待どおりに機能します!ありがとう! –

+0

この設定変数はグローバル設定への参照ですが、アプリの他の領域には影響しませんか? –

0

あなたの場合:

config.Formatters.Clear(); 
config.Formatters.Add(new JsonMediaTypeFormatter()); 
config.Formatters.Add(new XmlMediaTypeFormatter()); 
  • 代わりに、フォーマッタをフィルタリングすることで次のことを、Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.csでファイルを次のように変更(highlighedコメント)を行うと行うことができます特定のフォーマットタイプを削除したい場合:

      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); 
    
  • 関連する問題