【问题标题】:How to allow powershell to download an EXE from a .net core MVC web app?如何允许 powershell 从 .net 核心 MVC Web 应用程序下载 EXE?
【发布时间】:2017-11-21 22:21:30
【问题描述】:

我有一个依赖于 .net 框架控制台应用程序的 .net 核心 MVC Web 应用程序。当核心应用程序构建时,控制台应用程序也是如此,我在 bin 目录中获得了exe

这很好用,但是现在我需要通过 Web 应用程序提供一个端点,允许任何人下载 EXE(目的是允许 powershell 脚本通过端点下载 exe)。

如何做到这一点?

我了解以下内容可用于实际下载文件:

Invoke-WebRequest http://localhost:8080/download/tokenizer.exe -OutFile c:\download\tokenizer.exe

但是我不知道如何让exe 可以访问。我相信我需要将 EXE 从 bin 移动到某个目录,然后我将其配置为可公开访问,但我在这里迷失了详细信息。

【问题讨论】:

  • 您如何为其余的静态内容提供服务? (wwwroot?)
  • @SLaks 我刚刚检查过,是的,它是 wwwroot - 我对 .net 核心约定有点陌生。这是否意味着我需要一个构建后事件才能复制到 wwwroot 中?

标签: c# .net asp.net-mvc powershell asp.net-core


【解决方案1】:

默认情况下,ASP.NET Core 静态文件中间件将只提供它理解的内容类型。未知文件类型将返回 404。

可以将中间件配置为提供未知文件类型,但显式添加您自己的内容类型更安全:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".exe"] = "application/vnd.microsoft.portable-executable";
app.UseStaticFiles(new StaticFileOptions
    {
        ContentTypeProvider = provider,            
    });

【讨论】:

    【解决方案2】:

    .Net Core 应用程序从wwwroot 目录提供静态文件(您可以在 Startup.cs 中看到此配置)。

    要提供静态文件,您需要将其复制到那里。

    【讨论】:

    • 是否需要任何自定义配置来支持 GETexe 文件?我知道.net framework / web.configs 在这种情况下需要一些强制...
    • 还有 - 你知道将文件从 bin 目录复制到 wwwroot 的最佳方法是什么吗?
    • 我不认为 .Net Core 通过扩展进行任何过滤。您应该使用 Post-Build 事件。
    • 对 - 这就是我现在正在玩的。我将为此创建另一个问题。谢谢!
    • 我通过copy /Y $(ProjectDir)bin\debug\netcoreapp2.0\tokenizer.exe $(ProjectDir)wwwroot\exe\tokenizer.exe 复制了该文件并看到它,但是导航到/exe/tokenizer.exe 给我一个404。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2018-06-21
    • 1970-01-01
    • 2020-05-06
    相关资源
    最近更新 更多