Joh*_*ers 11 c# oauth servicestack
是否有可能在没有重大hackery的情况下在Runner中获取ServiceStack请求的原始请求主体?
我正在编写一个oauth服务提供程序,使用新的API(Service and Runner)在ServiceStack上运行.由于OAuth签名的工作方式,我需要为每个请求获取原始请求正文.OAuth保护层已添加到Runner中,因此无效的OAuth请求可以轻松返回空/错误响应,而无需Service类中的任何样板或子类化特殊的"OAuthService"类.
myt*_*thz 15
访问Raw Request Body的方法是使用IHttpRequest.GetRawBody()或读取IHttpRequest.InputStream.
但由于HTTP请求主体是仅前向流,因此默认情况下它只能被调用一次,这通常由ServiceStack调用以反序列化请求DTO.该序列化和反序列化文档展示如何告诉ServiceStack跳过反序列化的请求,并注入未读请求流进请求DTO有:
public class Hello : IRequiresRequestStream
{
/// <summary>
/// The raw Http Request Input Stream
/// </summary>
Stream RequestStream { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果您仍希望ServiceStack反序列化Request DTO,但也访问原始请求体,则需要告诉ServiceStack在读取之前缓冲请求,您可以通过添加PreRequestFilter来执行此操作:
appHost.PreRequestFilters.Insert(0, (httpReq, httpRes) => {
httpReq.UseBufferedStream = true;
});
Run Code Online (Sandbox Code Playgroud)
现在,您可以httpReq.GetRawBody()多次调用或直接读取,IHttpRequest.InputStream因为它现在已缓冲.