添加.well-知道asp.net核心

时间:2017-04-02 09:48:15

标签: c# asp.net-core lets-encrypt

我希望在我的root中有一个Label1.Text = "" Label2.Text = "" Label3.Text = "" ... 目录,用于letsencrypt续订。

我添加了.well-known的路线,如此:

.well-known

我在我的wwwroot中添加了一个名为 app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @".well-known")), RequestPath = new PathString("/.well-known"), ServeUnknownFileTypes = true // serve extensionless file }); 的替代品,但在发布时它永远不会被复制到输出中。

我尝试向其中添加文件并编辑csproj:

.well-known

每次发布​​我都要手动创建目录。如何将其自动添加到wwwroot?

4 个答案:

答案 0 :(得分:6)

  

我尝试向其中添加文件并编辑csproj:

<ItemGroup>
  <Content Include="wwwroot\.well-known\" />
</ItemGroup>

您无法通过内容复制文件夹,只能复制文件。你必须把它改成

<ItemGroup>
  <Content Include="wwwroot\**">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
<ItemGroup>

并且像评论中提到的那样,你需要在里面放一个空的虚拟文件。

答案 1 :(得分:1)

您可以将以下代码添加到MyProject.csproj文件中

  <ItemGroup>
    <Content Include=".well-known\acme-challenge\**">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

答案 2 :(得分:0)

另一种方法是-如果您有复杂的规则-或文件因域而异(就像某些类型的验证令牌一样),就可以创建控制器。

public class WellKnownFileController : Controller
{
    public WellKnownFileController()
    {

    }

    [Route(".well-known/apple-developer-merchantid-domain-association")]
    public ContentResult AppleMerchantIDDomainAssociation()
    {
        switch (Request.Host.Host)
        {
            case "www2.example.com":
                return new ContentResult
                {
                    Content = @"7B227073323935343637",
                    ContentType = "text/text"
                };

            default:
                throw new Exception("Unregistered domain!");
        }
    }
}

然后您可以点击.well-known/apple-developer-merchantid-domain-association并获得该控制器。

当然,您可以从磁盘或任何需要执行的操作中加载文件-或具有传递权限。

答案 3 :(得分:0)

这对我有用...

在 csproj 文件中:

<ItemGroup>
    <Content Include="wwwroot\.well-known\**">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

在 Startup.cs 中

app.UseStaticFiles(); // <-- don't forget this
app.UseStaticFiles(new StaticFileOptions
{
     FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot/.well-known")),
     RequestPath = new PathString("/.well-known"),
     ServeUnknownFileTypes = true
});