惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
月光博客
月光博客
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
IT之家
IT之家
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
爱范儿
爱范儿

博客园 - Insus.NET

在javascript或vue探测文件是否存在 Vue的v-show实践 HTTP Error 404.0 - Not Found Vue3实现拖放式上传 拖放式上传 实现MultipartStreamProvider经Web API上传文档或图片 文件上传和表单字段混合提交 angularjs根据类型动态加载组件 angularjs获取数据服务 扫一扫直连WiFi二维码 User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 将警报消息改为吐司消息 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端
在HttpContext.Current返回null时如何操作
Insus.NET · 2026-09-09 · via 博客园 - Insus.NET

WEB API 控制类(v2.1)中,异步线程中,想获取存储绝对路径,
可以参考下面几种比较方法:

HttpRuntime.AppDomainAppPath

public static string AppDomainAppPath
{
    get
    {
        // 应用程序根目录物理路径,末尾带反斜杠
        return HttpRuntime.AppDomainAppPath;
    }
}
AppDomain.CurrentDomain.BaseDirectory
public static string BaseDirectory
{
    get
    {
        return AppDomain.CurrentDomain.BaseDirectory;
    }
}

示例,在你的项目中,创建了一个临时目录Temp时,
在代码中,你可以这样访问到其物理路径:

 public static string TempDirectory
 {
     get
     {
         // 使用 HostingEnvironment.MapPath 获取目录,不依赖 HttpContext
         string tempDirectory = HostingEnvironment.MapPath("~/Temp/");
         if (!Directory.Exists(tempDirectory))
             Directory.CreateDirectory(tempDirectory);

         return tempDirectory;
     }
 }

现实中,上传文件经Web API异步上传,在异步中,调用HttpContext.Current.Server.MapPath(),往往得到的是null。
你可以异步开始前调用是没有问题的。
2026-09-09_03-39-10

但是,如果你觉得这样复杂,你可以在需要地方:

 HttpContext context = HttpContext.Current;
 if (context != null)
 {
     context.Server.MapPath("~/Temp");
 }

不过Insus.NET还是较喜欢博文开头的的2个property:
HttpRuntime.AppDomainAppPath 和AppDomain.CurrentDomain.BaseDirectory

延申方法,重写MapPath方法:
2026-09-09_03-53-15

public static string MapPath(string virtualPath)
{
    if (HttpContext.Current != null)
    {
        return HttpContext.Current.Server.MapPath(virtualPath);
    }
    else
    {
        string path = virtualPath.Replace("~/", "\\");
        path = path.Replace("/", "\\");
        if (path.StartsWith("\\"))
        {
            path = path.TrimStart('\\');
        }
        return System.IO.Path.Combine(BaseDirectory, path);
    }
}

View Code