ASP.NET Web APIはtext/plainコンテンツ協議をサポートする
1627 ワード
ASP.NET Web APIのContent Negotiationメカニズムの理想的な状況は、クライアントが要求ヘッダのAcceptフィールドにどのようなMIMEタイプを指定するか、Web APIサービス側が対応するMIMEタイプのコンテンツを返すことである(応答ヘッダの中Content-TypeはAcceptで指定されたMIMEタイプである).
現実的には、Web APIサービス側がどのようなMIMEタイプの応答タイプを返すことができるかは、このMIMEタイプに対応するMediaType Formatterがあるかどうかにかかっている.ASP.NET Web APIのデフォルト実装では、2種類のMediaType Formatter(私が使用しているWeb APIバージョンは5.2)しか提供されていません.XmlMediaType FormatterとJsonMediaType Formatterです.したがって、要求ヘッダのAcceptでアプリケーション/xmlまたはアプリケーション/jsonとして指定しない限り、他の任意のMIMEを指定すると、Web APIはアプリケーション/json(デフォルトの応答タイプ)を返します.
今日ではこの現実に半日振り回され、acceptではtext/plainを指定し、Web APIは常にjson形式のデータを返します.その後、ネットワークを通じてパッケージをつかんでやっとこの問題を発見した.本当にASPがわかりません.NET Web APIはなぜPlainTextType Formatterをデフォルトで実装しないのか.
仕方なく、PlainTextType Formatterを自分で実現するしかありません. MediaType Formatter を継承コンストラクタにMediaTypeHeaderValue(「text/plain」) を追加リロードの3つの方法:CanReadType(),CanWriteType()およびWriteToStreamAsync() 完全な実装コードは次のとおりです.
現実的には、Web APIサービス側がどのようなMIMEタイプの応答タイプを返すことができるかは、このMIMEタイプに対応するMediaType Formatterがあるかどうかにかかっている.ASP.NET Web APIのデフォルト実装では、2種類のMediaType Formatter(私が使用しているWeb APIバージョンは5.2)しか提供されていません.XmlMediaType FormatterとJsonMediaType Formatterです.したがって、要求ヘッダのAcceptでアプリケーション/xmlまたはアプリケーション/jsonとして指定しない限り、他の任意のMIMEを指定すると、Web APIはアプリケーション/json(デフォルトの応答タイプ)を返します.
今日ではこの現実に半日振り回され、acceptではtext/plainを指定し、Web APIは常にjson形式のデータを返します.その後、ネットワークを通じてパッケージをつかんでやっとこの問題を発見した.本当にASPがわかりません.NET Web APIはなぜPlainTextType Formatterをデフォルトで実装しないのか.
仕方なく、PlainTextType Formatterを自分で実現するしかありません.
public class PlainTextTypeFormatter : MediaTypeFormatter
{
public PlainTextTypeFormatter()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}
public override bool CanReadType(Type type)
{
return false;
}
public override bool CanWriteType(Type type)
{
return type == typeof(string);
}
public override async Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
{
using (var sw = new StreamWriter(writeStream))
{
await sw.WriteAsync(value.ToString());
}
}
}