1

我们正在成功地使用酷 uri 的开发(SS v3.9.64、Visual Studio 2012、Framework 3.5),例如:

Routes.Add<Bark>("/bark.ashx/{dogname}", "GET");

但是当我们部署它时,我们可以让它与查询字符串一起工作。使用以下网址时,我们会收到“未找到请求的处理程序”:

http://localhost:51781/IrpfWebApi/bark.ashx/sprocket

我们通过将项目发布到本地并从 Visual Studio 2012 运行它来重现此问题(它应该是同一台服务器)。

我们使用 .ashx 扩展名是为了能够在 W2003 / IIS6 中工作,正如在几个地方所解释的那样。

4

1 回答 1

2

IIS 6 所需的.ashx扩展应该是处理程序路径而不是路由的一部分,例如:

  <!-- ServiceStack: Required to host at: /api.ashx -->
  <location path="api.ashx">
    <system.web>
      <httpHandlers>
        <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
      </httpHandlers>
    </system.web>

    <!-- Required for IIS7 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
      </handlers>
    </system.webServer>
  </location>
  <!-- Required for MONO -->
  <system.web>
    <httpHandlers>
      <add path="api.ashx*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
    </httpHandlers>
  </system.web>
  <!-- Required for IIS7 -->
  <system.webServer>
    <!-- ServiceStack: Required -->
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>

那么您的路线注册将是:

Routes.Add<Bark>("/bark/{dogname}", "GET");
于 2013-10-23T18:29:43.233 回答