2011-10-31 100 views
2

我在嘗試配置OpenRasta資源以響應HTTP HEAD操作。我已經嘗試過使用UriName,不同的方法名稱和簽名,但是我還找不到解決方案。這是我使用的配置的代碼:OpenRasta是否支持HEAD HTTP方法?

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

而這是在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) }; 
} 

樣品請求:

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

響應:

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 

並在OpenR ASTA日誌:

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: 

這是乾淨的版本在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> 

回答

0

您可以使用ResourcesNamed此:

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

感謝,但它沒有工作!我還嘗試將ResourcesOfType ()更改爲ResourcesOfType (),但錯誤是相同的......最奇怪的是,如果我使用GET切換HEAD操作,則會找到該處理程序。 – aelesbao

+0

嗯,這很奇怪我用它來自己的頭部請求,你的uri看起來有點奇怪,/?type = {type},不應該是/ type = {type}?你的httphandler web.config openrasta設置看起來像什麼? –

+0

我更新了與web.config的東西 – aelesbao