.NET Core3.1下ServiceStack抛出IOException 如何关闭路径校验功能
问题原因
该异常由ServiceStack默认的静态文件处理逻辑触发:当收到未匹配到服务接口的请求时,ServiceStack会默认尝试从部署目录读取对应路径的静态文件返回。http://test、php://test这类路径中包含冒号字符,属于Windows系统下的非法目录/文件名,文件系统读取操作直接抛出IOException,还未走到404响应的处理逻辑。
解决方案
方案1:完全禁用静态文件服务(无静态文件托管需求时使用)
直接在AppHost的Configure方法中修改HostConfig配置,关闭静态文件处理逻辑,所有未匹配到接口的请求将直接返回404:
SetConfig(new HostConfig { EnableStaticFiles = false });
方案2:保留静态文件服务,过滤非法路径
如果仍需要托管静态资源,可以通过全局请求过滤器提前拦截包含://的非法路径,直接返回404:
GlobalRequestFilters.Add((req, res, dto) => { if (req.PathInfo.Contains("://")) { res.StatusCode = 404; res.EndRequest(); } });
也可以将这类特殊前缀添加到HostConfig的IgnorePathPrefixes配置中,让ServiceStack直接跳过对这类路径的静态文件扫描:
SetConfig(new HostConfig { IgnorePathPrefixes = new List<string> { "http:", "php:" } });
内容的提问来源于stack exchange,提问作者Nithin Kumar Narayana Swamy
相关产品推荐
相关产品推荐

