我们正在开发酷炫的uri(SS v3.9.64,Visual Studio 2012,Framework 3.5),例如:
Routes.Add<Bark>("/bark.ashx/{dogname}", "GET");
但是当我们部署它时,我们可以使用querystring来处理它。当使用以下网址时,我们会收到“未找到请求处理程序”:
http://localhost:51781/IrpfWebApi/bark.ashx/sprocket
我们通过将项目发布到本地并从Visual Studio 2012运行它来重现此问题(它应该是相同的服务器)。
我们使用.ashx扩展名,以便能够在W2003 / IIS6中工作,因为它在几个地方都有解释。
答案 0 :(得分: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");