ASP.NET WebApiを使用してRESTful APIを作成しています。コントローラーの1つでPUTメソッドを作成していますが、コードは次のようになります。
public HttpResponseMessage Put(int idAssessment, int idCaseStudy, string value) {
var response = Request.CreateResponse();
if (!response.Headers.Contains("Content-Type")) {
response.Headers.Add("Content-Type", "text/plain");
}
response.StatusCode = HttpStatusCode.OK;
return response;
}
AJAX経由でブラウザでその場所にPUTすると、次の例外が発生します。
誤ったヘッダー名。要求ヘッダーがHttpRequestMessageで使用され、応答ヘッダーがHttpResponseMessageで使用され、コンテンツヘッダーがHttpContentオブジェクトで使用されていることを確認してください。
しかし、Content-Type
は応答に対して完全に有効なヘッダーではありませんか?この例外が発生するのはなぜですか?
HttpContentHeaders.ContentTypeプロパティ をご覧ください。
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
if (response.Content == null)
{
response.Content = new StringContent("");
// The media type for the StringContent created defaults to text/plain.
}
ASP Web API:EmptyContent
type。に何かがありません。すべてのコンテンツ固有のヘッダーを許可しながら、空のボディを送信できます。
次のクラスをコードのどこかに配置します。
_public class EmptyContent : HttpContent
{
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
return Task.CompletedTask;
}
protected override bool TryComputeLength(out long length)
{
length = 0L;
return true;
}
}
_
その後、必要に応じて使用します。これで、追加のヘッダー用のコンテンツオブジェクトが作成されました。
_response.Content = new EmptyContent();
response.Content.Headers.LastModified = file.DateUpdatedUtc;
_
new StringContent(string.Empty)
の代わりにEmptyContent
を使用する理由
StringContent
は、多くのコードを実行する重いクラスです(継承するため ByteArrayContent
)StringContent
は、無駄な/問題のあるヘッダーを追加します:_Content-Type: plain/text; charset=...
_