我目前正在研究一个解决方案,我们正在运行一个自托管的 ServiceStack 层,但问题是当我从浏览器访问它并且浏览器尝试获取 favicon 时,我不断收到错误消息。据我所见,在运行自托管时没有忽略特定路由的选项吗?
我会想象像
Routes.Ignore("favicon*")
有点像
Routes.Add<Foo>("/foo")
在我的 AppHost 配置方法中
我目前正在研究一个解决方案,我们正在运行一个自托管的 ServiceStack 层,但问题是当我从浏览器访问它并且浏览器尝试获取 favicon 时,我不断收到错误消息。据我所见,在运行自托管时没有忽略特定路由的选项吗?
我会想象像
Routes.Ignore("favicon*")
有点像
Routes.Add<Foo>("/foo")
在我的 AppHost 配置方法中
在我的 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 的负载。
与使用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();
});
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.