1

ServiceStack 3.9.2x を使用。

すぐに使用できる (メタデータ ページに表示されているように) サービス スタックには、一連のコンテンツ タイプ (xml、json、jsv など) のサポートが組み込まれています。コンテンツ。たとえば、私のサービスは JSON を話す方法しか認識しておらず、ServiceStack に "Content-type: application/xml" または "Accept: application/xml" ヘッダーを使用する要求を受け入れさせたくありません。上記の場合、ServiceStack が 406 (Not Acceptable) 応答で応答するようにしたいと考えています。理想的には、サポートされているコンテンツのセットを本文に含めます (HTTP 1.1 仕様による)。

また、ServiceStack は、Accept ヘッダーまたは Content-Type ヘッダーを持たないリクエストのデフォルトのコンテンツ タイプをどのように決定するのでしょうか (現在、HTML をレンダリングしていると思います)。これらの場合、特定のコンテンツ タイプを想定するように ServiceStack に指示する方法はありますか?

4

1 に答える 1

2

ServiceStackでデフォルトのコンテンツタイプを設定する方法については、この回答を参照してください:ServiceStackのデフォルト形式

リクエストフィルターを使用して、リクエストされたコンテンツタイプを次のように検出できます。

httpReq.ResponseContentType

グローバルリクエストフィルターでは、それを許可する(何もしない)か、応答に直接書き込むかを選択できます。たとえば、必要に応じて、サポートされているコンテンツのリストを含む406を選択できます。

ServiceStackの操作の順序

実装アーキテクチャ図は、ServiceStackで発生する操作の順序の視覚的な手がかりを示しています。どこ:

  1. EndointHostConfig.RawHttpHandlers何よりも先に実行されます。つまり、ASP.NETIHttpHandlerを返すとServiceStackが完全にバイパスされます。
  2. IAppHost.PreRequestFiltersリクエストDTOが逆シリアル化される前に実行されます
  3. 優先度<0のリクエストフィルター属性が実行されます
  4. 次に、グローバルリクエストフィルターが実行されます
  5. 優先度>=0のリクエストフィルター属性が続きます
  6. アクションリクエストフィルター(新しいAPIのみ)
  7. その後、サービスが実行されます
  8. アクション応答フィルター(新しいAPIのみ)
  9. 優先度<0の応答フィルター属性が続きます
  10. 次に、グローバル応答フィルター
  11. 優先度>=0の応答フィルター属性が続きます

いずれかのフィルターで応答を閉じるときはいつでも、つまりhttpRes.Close()、応答の処理が短絡され、その要求に対してそれ以上の処理は行われません。

于 2012-11-05T20:48:37.767 に答える