我目前的工作,我们有一个自托管ServiceStack层运行的解决方案,但问题是,我不断收到错误,当我从浏览器访问和浏览器尝试获取图标。 至于我可以看有没有忽略一个特定的路线运行自托管时的选项?
我想象像
Routes.Ignore("favicon*")
有点像
Routes.Add<Foo>("/foo")
在我APPHOST配置方法
我目前的工作,我们有一个自托管ServiceStack层运行的解决方案,但问题是,我不断收到错误,当我从浏览器访问和浏览器尝试获取图标。 至于我可以看有没有忽略一个特定的路线运行自托管时的选项?
我想象像
Routes.Ignore("favicon*")
有点像
Routes.Add<Foo>("/foo")
在我APPHOST配置方法
不同于MVC它使用的HTTP模块来处理和劫持的所有请求,ServiceStack内置于ASP.NET的原始IHttpHandler
接口。 这意味着ServiceStack必须处理匹配ServiceStack处理路径(例如任何请求/
或/api
通过返回的IHttpHandler并不能忽略他们就像他们在MVC做)。
但是,您可以捕捉并通过注册的处理程序处理所有未处理的请求IAppHost.CatchAllHandlers
,如:
appHost.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => {
if (pathInfo.StartsWith("favicon"))
return new NotFoundHttpHandler();
});
在我的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的负载在servicestack应用。
只是要追加@ antonydenyer的答案。 他的解决方案似乎结合owin与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>
这里SS是处理除/ AUTH每个请求。 验证使用owin映射到Identityserver3。