OpenRasta是否支持HEAD HTTP方法?
本文关键字:方法 HTTP HEAD 是否 支持 OpenRasta | 更新日期: 2023-09-27 18:12:59
我正在尝试配置OpenRasta资源来响应HTTP HEAD操作。我已经尝试使用UriName,不同的方法名称和签名,但我找不到解决方案。这是我使用的配置代码:
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
和OpenRasta日志:
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>
您可以使用ResourcesNamed:
ResourceSpace.Has.ResourcesNamed("head")
.AtUri("/assets/{providerCode}/?type={type}")
.HandledBy<AssetHandler>();