J'ai un module NancyFX très simple dont je veux simplement faire écho les résultats d'un appel API à l'expéditeur. J'utilise une façade qui convertit le XML entrant en JSON avant de le remettre au point de terminaison Nancy. Cette façade modifie correctement le contenu en JSON car je peux le tester en utilisant le service d'écho pour l'API et voir la réponse.Corps de requête vide lorsque le codage de transfert est fragmenté - NancyFX
Cependant, comme la façade supprime l'en-tête content-length et définit l'encodage de transfert sur chunked, le Request.Body est toujours vide dans mon module Nancy.
Existe-t-il une configuration nécessaire pour activer la prise en charge du codage Chunked dans NancyFX?
J'héberge actuellement sur IIS 7, mais j'ai également accès à IIS 8.
Je peux voir qu'en utilisant l'hébergement OWIN, il est possible d'activer le transfert en bloc en utilisant HostConfiguration, mais pour d'autres raisons je ne peux pas utiliser l'hébergement OWIN et compter sur l'hébergement IIS.
J'ai activé chunked transfert sur IIS avec la commande:
appcmd set config /section:asp /enableChunkedEncoding:True
Mon web.config est actuellement:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpHandlers>
<add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
</httpHandlers>
<httpRuntime targetFramework="4.5.1" />
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
</system.web>
<system.webServer>
<modules>
<remove name="WebDavModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
<httpErrors existingResponse="PassThrough" />
</system.webServer>
</configuration>
Le module lui-même est très simple et se compose de:
Post["/"] = parameters =>
{
var traceRef = Guid.NewGuid();
var body = this.Request.Body.AsString();
Logger.Trace("Trace ref: {0}, request inbound.", traceRef);
Logger.Trace(body);
AuthRequest auth = new AuthRequest();
try
{
auth = this.Bind<AuthRequest>();
}
catch (Exception ex)
{
Logger.Error("Trace ref: {0}, error: {1}. Exception: {2}", traceRef, ex.Message, ex);
}
var responseObject = new
{
this.Request.Headers,
this.Request.Query,
this.Request.Form,
this.Request.Method,
this.Request.Url,
this.Request.Path,
auth
};
return Response.AsJson(responseObject);
};
Merci @ Joe-B. Je vais jeter un coup d'oeil à la source de Nancy. J'ai fini par contourner ce problème en supprimant la responsabilité de la conversion de JSON en XML et en laissant à la place le modèle Nancy prendre en charge la réception et la liaison de XML ou de JSON. –