ServiceStackを使用して、 304NotModifiedをそのまま返したいだけです。
HTTP/1.1 304 Not Modified
ただし、ServiceStackは、他の多くの不要な(304コードでHttpResultを返す)ヘッダーを次のように追加します。
HTTP/1.1 304 Not Modified
Content-Length: 0
Content-Type: application/json
Server: Microsoft-HTTPAPI/2.0
X-Powered-By: ServiceStack/3.94 Win32NT/.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type
Date: Tue, 07 Aug 2012 13:39:19 GMT
他のヘッダーが出力されないようにするにはどうすればよいですか?ダミーのコンテンツタイプフィルターを登録して、 HttpResultでさまざまなアプローチを試しましたが、その名前はコンテンツのみを制御し、ヘッダーやここにリストされているその他のものは制御しないことを意味します。また、IStreamWriterとIHasOptionsを使用して独自のIHttpResult派生物を実装しようとしましたが、同じ結果が得られました。ServiceStackは不要なヘッダーを追加します。
ありがとう
アップデート
以下を使用して削除できましたが、一部のヘッダー、つまり、、、がまだ存在していcontent-type
ます。content-length
server
date
public override object OnGet(FaultTypes request)
{
var result = new HttpResult
{
StatusCode = HttpStatusCode.NotModified,
StatusDescription = "Not Modified", // Otherwise NotModified written!
};
// The following are hacks to remove as much HTTP headers as possible
result.ResponseFilter = new NotModifiedContentTypeWriter();
// Removes the content-type header
base.Request.ResponseContentType = string.Empty;
return result;
}
class NotModifiedContentTypeWriter : ServiceStack.ServiceHost.IContentTypeWriter
{
ServiceStack.ServiceHost.ResponseSerializerDelegate ServiceStack.ServiceHost.IContentTypeWriter.GetResponseSerializer(string contentType)
{
return ResponseSerializerDelegate;
}
void ServiceStack.ServiceHost.IContentTypeWriter.SerializeToResponse(ServiceStack.ServiceHost.IRequestContext requestContext, object response, ServiceStack.ServiceHost.IHttpResponse httpRes)
{
}
void ServiceStack.ServiceHost.IContentTypeWriter.SerializeToStream(ServiceStack.ServiceHost.IRequestContext requestContext, object response, System.IO.Stream toStream)
{
}
string ServiceStack.ServiceHost.IContentTypeWriter.SerializeToString(ServiceStack.ServiceHost.IRequestContext requestContext, object response)
{
return string.Empty;
}
public void ResponseSerializerDelegate(ServiceStack.ServiceHost.IRequestContext requestContext, object dto, ServiceStack.ServiceHost.IHttpResponse httpRes)
{
}
}