2011-10-31 2 views
2

J'essaie de configurer une ressource OpenRasta pour répondre à une opération HTTP HEAD. J'ai déjà essayé d'utiliser UriName, différents noms de méthodes et signatures, mais je n'ai pas encore trouvé de solution. Ceci est le code de configuration que je:OpenRasta prend-il en charge la méthode HEAD HTTP?

ResourceSpace.Has.ResourcesOfType<Stream>() 
       .AtUri("/assets/{providerCode}/?type={type}") 
       .HandledBy<AssetHandler>(); 

Et voici la méthode à l'AssetHandler:

[HttpOperation(HttpMethod.HEAD)] 
public OperationResult Head(string providerCode, int type) 
{ 
    var asset = assetService.GetAssetAtCDN(providerCode, type); 
    if (asset == null) return new OperationResult.NotFound(); 

    return new OperationResult.Found { RedirectLocation = new Uri(asset.Url) }; 
} 

Demande d'échantillon:

HEAD http://localhost:63483/assets/PygvCaOfK353etajBlbd/?type=4 HTTP/1.1 
Accept-Encoding: gzip,deflate 
Host: localhost:63483 

Réponse:

HTTP/1.1 405 Method Not Allowed 
Server: ASP.NET Development Server/9.0.0.0 
Date: Mon, 31 Oct 2011 17:40:39 GMT 
X-AspNet-Version: 2.0.50727 
Cache-Control: private 
Content-Length: 0 
Connection: Close 

Et à OpenR ASTA journal:

DEBUG Entering OpenRastaRewriterHandler: Rewriting to original path e: 
DEBUG Entering OpenRastaIntegratedHandler: Request for http://localhost:63483/assets/PygvCaOfK353etajBlbd/?type=4 e: 
DEBUG Found 0 operation(s) with a matching name. e: 
DEBUG Found 0 operation(s) with matching [HttpOperation] attribute. e: 
INFO Executing OperationResult OperationResult: type=MethodNotAllowed, statusCode=405. e: 
INFO No response codec was searched for. The response entity is null or a response codec is already set. e: 
DEBUG There was no response entity, not rendering. e: 
DEBUG Writing http headers. e: 
DEBUG Exiting OpenRastaIntegratedHandler e: 
DEBUG Exiting OpenRastaRewriterHandler e: 

Ceci est la version propre du web.config:

<system.web> 
    <pages> 
     <namespaces> 
     <add namespace="OpenRasta.Web"/> 
     <add namespace="OpenRasta.Web.Markup"/> 
     <add namespace="OpenRasta"/> 
     </namespaces> 
     <controls> 
     <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </controls> 
    </pages> 
    <httpHandlers> 
     <remove verb="*" path="*.asmx"/> 
     <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
     <!--OpenRasta--> 
     <add verb="*" path="*.rastahook" type="OpenRasta.Hosting.AspNet.OpenRastaHandler, OpenRasta.Hosting.AspNet"/> 
    </httpHandlers> 
    <httpModules> 
     <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <!--OpenRasta--> 
     <add name="OpenRastaModule" type="OpenRasta.Hosting.AspNet.OpenRastaModule, OpenRasta.Hosting.AspNet"/> 
    </httpModules> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules> 
     <remove name="ScriptModule"/> 
     <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="OpenRastaModule" type="OpenRasta.Hosting.AspNet.OpenRastaModule, OpenRasta.Hosting.AspNet"/> 
    </modules> 
    <handlers> 
     <remove name="WebServiceHandlerFactory-Integrated"/> 
     <remove name="ScriptHandlerFactory"/> 
     <remove name="ScriptHandlerFactoryAppServices"/> 
     <remove name="ScriptResource"/> 
     <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="OpenRastaHandler" verb="*" path="*.rastahook" type="OpenRasta.Hosting.AspNet.OpenRastaHandler, OpenRasta.Hosting.AspNet"/> 
    </handlers> 
    </system.webServer> 

Répondre

0

Vous pouvez utiliser ResourcesNamed pour cela:

ResourceSpace.Has.ResourcesNamed("head") 
      .AtUri("/assets/{providerCode}/?type={type}") 
      .HandledBy<AssetHandler>(); 
+0

merci, mais ça n'a pas fonctionné! J'ai également essayé de changer le ResourcesOfType () à ResourcesOfType (), mais l'erreur est la même ... La chose la plus étrange est que si je change l'opération HEAD avec un GET, le gestionnaire est trouvé. – aelesbao

+0

Hmm, c'est étrange je l'utilise moi-même pour les demandes de tête, votre uri semble un peu étrange, /? Type = {type}, ne devrait pas être/type = {type}? À quoi ressemblent les paramètres openrasta de httphandler web.config? –

+0

J'ai mis à jour le post avec les trucs web.config – aelesbao

Questions connexes