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>

OpenRasta是否支持HEAD HTTP方法?

您可以使用ResourcesNamed:

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