【问题标题】:OWIN WEB API self host resolve path to folderOWIN WEB API 自主机解析文件夹路径
【发布时间】:2015-11-01 21:45:28
【问题描述】:

ApiController 中的表单。我需要读取项目中嵌入的文件的内容。但我无法解析正确的路径

[HttpPost]
public HttpResponseMessage DoSomething()
{
    String content = System.IO.File.ReadAllText(@"~\SomeFolder\file.txt");
}

这样解析的路径指向:

C:...\bin\Debug\~\SomeFolder\file.txt

而不是

C:...\SomeFolder\file.txt

有没有人知道如何在 OWIN 自托管下解决这个问题?

【问题讨论】:

    标签: asp.net-web-api owin


    【解决方案1】:

    一般来说,尝试访问项目中的文件是没有意义的。部署所需的所有文件(dll、资产、txt...)都应该复制到一个单独的文件夹中,这样当我们需要部署时,我们只需复制该文件夹即可。

    您应该将文件设置为复制到输出并尝试:

    String content = System.IO.File.ReadAllText(@"SomeFolder\file.txt");
    

    解析为

    C:...\bin\Debug\SomeFolder\file.txt
    

    要使代码与 OWIN 一起使用,您可以查看此答案 How do you resolve a virtual path to a file under an OWIN host?。它建议使用HostingEnvironment.MapPath 并回退到在自托管场景中手动操作文件路径。

    【讨论】:

    • 我正在尝试发送 html 格式的电子邮件,因此我需要以某种方式获取 html 模板并替换所需的部分。我会使用 Server.MapPath("~/SendMail.htm") 但在 Owin 自主机下我没有这个选项你知道的任何其他选项?
    • @Gavello:Owin 不在 IIS 中运行,所以 Server.MapPath 应该是不可能的。如果您在 IIS 中托管 owin,也许您可​​以尝试:stackoverflow.com/questions/16557122/…。如果您在控制台主机和 IIS 主机中创建相对于根目录的文件,则此答案中的解决方案也应该有效。
    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 2010-12-27
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多