用于.netcore应用程序的wwwroot之外的静态文件

时间:2016-07-16 00:24:04

标签: ssl iis asp.net-core static-files staticfilehandler

我在我的@home网络服务器上使用https://github.com/ebekker/ACMESharp作为我的SSL(它是免费的!:O)。这是非常手动的,但在维基上注意到它在https://github.com/Lone-Coder/letsencrypt-win-simple提到了另一个项目,它是一个GUI,用于自动申请,下载和安装SSL证书到您的Web服务器。

GUI用于验证域名的方法是通过创建一个随机命名的文件,其中[webroot]/.well-known/[randomFile]内的随机文本字符串是扩展名。在[webroot]上运行.dotnetcore应用程序后,即使遵循更改" Handler Mappings"的说明,我也无法提供该文件。在IIS下。

似乎我可以通过[webRoot]/wwwroot/[whatever]直接导航到我们来提供文件 - 那么为什么我不能[webroot]/.well-known/[randomFile]

有人知道解决这个问题吗?我可以删除.netcore应用程序,然后运行SSL证书安装,但这个安装需要每2-3个月进行一次,因为它的手册我想更好地弄清楚如何做到这一点方式。

1 个答案:

答案 0 :(得分:3)

我在这里找到了我需要的信息:https://docs.asp.net/en/latest/fundamentals/static-files.html

基本上在我的Statup.cs中我需要改变它:

        // allows for the direct browsing of files within the wwwroot folder
        app.UseStaticFiles();

        // MVC routes
        app.UseMvc(routes => 
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

到此:

        // allows for the direct browsing of files within the wwwroot folder
        app.UseStaticFiles();

        // Allow static files within the .well-known directory to allow for automatic SSL renewal
        app.UseStaticFiles(new StaticFileOptions()
        {
            ServeUnknownFileTypes = true, // this was needed as IIS would not serve extensionless URLs from the directory without it
            FileProvider = new PhysicalFileProvider(
                    Path.Combine(Directory.GetCurrentDirectory(), @".well-known")),
            RequestPath = new PathString("/.well-known")
        });

        // MVC routes
        app.UseMvc(routes => 
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

编辑 - 请注意,此目录" .well-known"仅在Web服务器上创建,当我在本地再次开始开发时,我遇到了错误,因为" .well-known"目录不存在。所以现在我的项目中只有一个空目录,但至少我的SSL更新是自动化的! :d