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

cyb*_*zed 7 servicestack

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

我会想象类似的东西

Routes.Ignore("favicon*")
Run Code Online (Sandbox Code Playgroud)

有点像

Routes.Add<Foo>("/foo")
Run Code Online (Sandbox Code Playgroud)

在我的AppHost配置方法中

Ant*_*yer 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>
Run Code Online (Sandbox Code Playgroud)

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


myt*_*thz 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();
});
Run Code Online (Sandbox Code Playgroud)