当前位置: 首页 > 编程语言 > C#

ServiceStack:服务目录下的静态文件?分享

时间:2023-04-10 18:06:17 C#

ServiceStack:服务目录下的静态文件?我正在将我独立的本地Web服务器转换为使用ServiceStack来为所有页面和资源提供服务。我从这个问题中看到使用服务堆栈提供静态文件服务使用服务堆栈很容易提供单个静态文件。在我自己开发的实现中,在检查URL是否匹配任何特定处理程序(相当于ServiceStack路由)之后,默认处理程序然后检查其HttpData目录中的静态文件以查找匹配的URL。如果该文件不存在,将生成404错误。如果没有其他服务匹配,ServiceStack用于从文件系统提供文件的最佳模式是什么?请注意,我在没有IIS的独立模式下使用它。这些文件可以是HTML、PNG、JS和一些其他内容类型。注意:我看到ServiceStack.Razor包可能有助于满足我的要求,但我找不到它的文档。我会问一个单独的问题。编辑:我在这个问题中找到了一个参考Creatingaroutefortherootpath'/'withServiceStack指出注册IAppHost.CatchAllHandlers-调用不匹配的请求。到目前为止,我还没有找到任何关于如何注册的文档或示例。注意:我是独立运行的,所以这需要在C#中完成,而不是XML。经过大量研究,我发现以下内容似乎有效。配置在AppHost构造函数中:CatchAllHandlers.Add((httpMethod,pathInfo,filePath)=>Tims.Support.StaticFileHandler.Factory(Params.Instance.HttpDataDir,"/",pathInfo));工厂检查文件是否存在并返回相应的处理程序,如果文件未被处理(因为它不存在)则返回null。这很重要,这样/metadata等其他URL才能继续工作。Processor实际处理程序的核心方法非常简单。通过覆盖ProcessRequest并使用适当的资源类型返回文件的字节,作业完成。为简单起见,此版本不包括任何用于缓存目的的日期处理。以上是C#学习教程:ServiceStack:staticfilesintheservicedirectory?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——示例代码publicclassStaticFileHandler:EndpointHandlerBase{受保护的文件信息fi;staticStaticFileHandler(){ExtensionContentType=newDictionary(StringComparer.InvariantCultureIgnoreCase){{".text","text/plain"},{".js","text/javascript"},{".css","text/css"},{".html","text/html"},{".htm","text/html"},{".png","image/png"},{".ico","image/x-icon"},{".gif","image/gif"},{".bmp","image/bmp"},{".jpg","image/jpeg"}};}publicstringBaseDirectory{保护集;得到;}publicstringPrefix{保护集;得到;}publicStaticFileHandler(stringbaseDirectory,stringprefix){BaseDirectory=baseDirectory;前缀=前缀;}privateStaticFileHandler(FileInfofi){this.fi=fi;}publicstaticStaticFileHandlerFactory(stringbaseDirectory,stringprefix,stringpathInfo){如果(!pathInfo.StartsWith(prefix,StringComparison.InvariantCultureIgnoreCase)){返回null;}varfn=baseDirectory+"/"+pathInfo.After(prefix.Length);varfi=newSystem.IO.FileInfo(fn);如果(!fi.Exists){返回null;}返回新的StaticFileHandler(fi);}publicoverridevoidProcessRequest(IHttpRequesthttpReq,IHttpResponsehttpRes,stringoperationName){using(varsource=newSystem.IO.FileStream(fi.FullName,System.IO.FileMode.Open)){varbytes=source.ReadAllBytes();httpRes.OutputStream.Write(bytes,0,bytes.Length);}//时间戳=fi.LastWriteTime;httpRes.AddHeader("日期",DateTime.Now.ToString("R"));httpRes.AddHeader("Content-Type",ExtensionContentType.Safeget(fi.Extension)??"text/plain");}publicoverrideobjectCreateRequest(IHttpRequestrequest,stringoperationName){returnnull;}publicoverrideobjectGetResponse(IHttpRequesthttpReq,IHttpResponsehttpRes,objectrequest){returnnull;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: