如何忽略具有自托管ServiceStack的路由

时间:2012-11-07 11:53:25

标签: servicestack

我目前正在开发一个运行自托管ServiceStack层的解决方案,但问题是当我从浏览器访问它并且浏览器尝试获取favicon时,我一直收到错误。据我所知,在运行自托管时没有选择忽略特定路由?

我会想象像

这样的东西
Routes.Ignore("favicon*")

有点像

Routes.Add<Foo>("/foo")

在我的AppHost配置方法

3 个答案:

答案 0 :(得分:5)

在我的web.config中,我喜欢这样的东西

<handlers>
    <add verb="*" path="*.*" type="System.Web.StaticFileHandler" name="files" />
    <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
</handlers>

这样,具有扩展名的所有文件都由IIS处理,这意味着您不必一直通过aspnet管道来服务器404.这也意味着您不会在您的服务器上记录404的负载服务栈应用程序。

答案 1 :(得分:3)

与使用 Http模块处理和劫持所有请求的MVC不同,ServiceStack是内置的ASP.NET的原始IHttpHandler接口。这意味着ServiceStack必须通过返回IHttpHandler来处理与ServiceStack处理程序路径匹配的任何请求(例如//api),并且无法像在MVC中那样忽略它们

然而,您可以捕获并通过在IAppHost.CatchAllHandlers中注册处理程序来处理所有未处理的请求,例如:

appHost.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => {
   if (pathInfo.StartsWith("favicon"))
      return new NotFoundHttpHandler();
});

答案 2 :(得分:0)

Just to append to @antonydenyer's answer. His solution seems to work also when combining owin with servicestack3.

<handlers> <add path="auth/*" name="Microsoft.Owin.Host.SystemWeb" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> </handlers>

Here SS is handling every request except /auth. Auth is mapped to Identityserver3 using owin.