7

我目前正在研究一个解决方案,我们正在运行一个自托管的 ServiceStack 层,但问题是当我从浏览器访问它并且浏览器尝试获取 favicon 时,我不断收到错误消息。据我所见,在运行自托管时没有忽略特定路由的选项吗?

我会想象像

Routes.Ignore("favicon*")

有点像

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

在我的 AppHost 配置方法中

4

3 回答 3

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。这也意味着您不会在 servicestack 应用程序中记录 404 的负载。

于 2013-05-24T11:11:55.763 回答
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();
});
于 2012-11-07T18:01:24.357 回答
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.

于 2015-07-31T19:19:41.030 回答