在Servant应用程序中访问原始请求体,可以通过以下步骤实现:
import Network.Wai (requestBody, RequestBodyLength(..))
import Network.Wai.Parse (sinkRequestBody)
import Servant (Handler, ServerError, err400)
import Servant.Server.Internal.Handler (withRequest)
data RawRequestBody = RawRequestBody ByteString
getRawRequestBody :: Handler RawRequestBody
getRawRequestBody = withRequest $ \request -> do
body <- liftIO $ requestBody request
case body of
(RequestBodyLBS lbs) -> return $ RawRequestBody $ toStrict lbs
_ -> throwError $ err400 { errBody = "Invalid request body" }
RawRequestBody
类型:type MyAPI = "endpoint" :> ReqBody '[OctetStream] RawRequestBody :> Get '[JSON] MyResponse
myServer :: Server MyAPI
myServer = getRawRequestBody :<|> otherEndpoints
通过以上步骤,你可以在Servant应用程序中访问原始请求体。注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和扩展。
关于Servant和相关概念的更多信息,你可以参考腾讯云的Serverless产品,它提供了无服务器架构的支持,可以帮助你更好地构建和部署Servant应用程序。具体产品介绍和相关链接如下:
请注意,以上答案仅供参考,具体的实现方式和推荐产品可能会因实际需求和环境而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云