所以我正在玩Owin和Katana,我想在我的公共文件夹中提供静态文件。
我有一个包含样式表和脚本文件夹的Content文件夹。
我的创业公司:
public void Configuration(IAppBuilder app)
{
#if DEBUG
//when things go south
app.UseErrorPage();
#endif
// Remap '/' to '.\public\'.
// Turns on static files and public files.
app.UseFileServer(new FileServerOptions()
{
RequestPath = PathString.Empty,
FileSystem = new PhysicalFileSystem(@".\public"),
});
}
因此,如果我浏览到localhost:8861 /我去了我公共文件夹中的index.html文件。没关系。 但我也可以浏览我想要阻止的localhost:8861 / Content / style.css。应该可以在公用文件夹中访问用户需要的所有内容。其余的都应该被阻止。
我怎样才能做到这一点?
答案 0 :(得分:2)
如果你需要简单的文件处理,绝对控制你做或不做的文件,想要服务,你可以完全控制一些中间件。我这样做是因为我希望在开发期间使用未缓存的文件服务。
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Web;
namespace Owin
{
using AppFunc = Func<IDictionary<string, object>, Task>;
public static class DynamicFileExtension
{
/// <summary>
/// ONLY use during development
/// </summary>
public static void UseDynamicFiles(this IAppBuilder app, string baseDirectory)
{
app.Use(new Func<AppFunc, AppFunc>(next => (async context =>
{
var method = (string) context["owin.RequestMethod"];
var requestpath = (string) context["owin.RequestPath"];
var scheme = (string) context["owin.RequestScheme"];
var response = (Stream) context["owin.ResponseBody"];
var responseHeader = (Dictionary<string, string[]>) context["owin.ResponseHeaders"];
if (method == "GET" && scheme == "http")
{
var fullpath = baseDirectory + requestpath;
// block logic...
if (File.Exists(fullpath))
{
using (var file = File.OpenRead(fullpath))
{
await file.CopyToAsync(response);
}
var mime = MimeMapping.GetMimeMapping(fullpath);
responseHeader.Add("Content-Type", new[] {mime});
return;
}
}
await next.Invoke(context);
})));
}
}
}
我不会在制作中使用它,但它为我做了诀窍。
答案 1 :(得分:1)
文件服务器的配置正确,不允许访问其他文件夹。我在测试OWIN自主项目中检查了它,它按预期工作,只能访问公用文件夹。我假设您使用IIS来托管您的OWIN应用程序(因此您的应用程序不是自托管的)。如果是这样,IIS静态文件处理程序允许aceess到静态文件和目录(以及您的内容文件夹)。因此,您可以搜索如何禁止访问IIS中的静态文件(可以在web.config中完成)或如何限制对其中某些文件的访问。
您可以从网站的配置中删除StaticFile Handler,但是您应该小心谨慎,因为从这时起IIS根本不会提供静态文件。
<configuration>
<system.webServer>
<handlers>
<remove name="StaticFile" />
</handlers>
</system.webServer>
</configuration>