运行 .NET Core 3.0 时未经授权访问 C:\Users

Posted

技术标签:

【中文标题】运行 .NET Core 3.0 时未经授权访问 C:\\Users【英文标题】:Access to C:\Users unauthorized when running .NET Core 3.0运行 .NET Core 3.0 时未经授权访问 C:\Users 【发布时间】:2020-11-19 07:29:12 【问题描述】:

我正在将一个库从 .NET Framework 迁移到 .NET Core。在这个库中,我提供了一种方便的方法来将 XML 数据保存在用户的AppData 文件夹中。

在 .Net Core 下运行时,出现异常:

拒绝访问路径“C:\Users”

当时_userDataPath的值为:

C:\Users\cedbo\AppData\Roaming\MyApp

这在 .NET Framework 下可以正常工作,因此不是授权问题。

// compute filepath
_userDataPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    appName);

_userDataFile = Path.Combine(_userDataPath, "UserData.xml");

// load data or create file if required.
T userData = null;

if (File.Exists(_userDataFile)) // !!! Returns false even when file exists

    userData = XmlTools.GetFromXml<T>(_userDataFile);

else

    userData = new T();

    if (!Directory.Exists(_userDataPath))  // !!! Returns false even when directory exists
    
        Directory.CreateDirectory(_userDataPath);  // Exception: Access to the path 'C:\Users' is denied.
    

    XmlTools.SaveToXml<T>(userData, _userDataFile);

如果 .NET Core 建议使用另一种标准方法,我已准备好使用另一种标准方法,但我没有找到任何关于此写入访问限制的内容,也没有发现 .NET Core 中推荐的另一种存储用户数据的方式。

谁能给点建议?

提前谢谢你。

【问题讨论】:

_userDataPath 的值是多少? 看起来组合的路径不正确...您能否硬编码 XML 文件的确切路径,只是为了验证这确实是一个访问问题到正确的路径? @CoolBots 在调试模式下,我看到变量中的路径是正确的。这发生在谈论 XML 文件之前,它是在创建包含文件夹时,不管里面会放什么。 做了额外的检查:测试xml文件和包含的文件夹是否存在不会崩溃,但即使这些元素确实存在也会返回false。 【参考方案1】:

这是我的发现:

我试图从 UWP 应用程序运行此代码。我试过了,但在 C:\ 或 D:\ 驱动器(D: 是第二个硬盘驱动器)等其他位置无法写入任何内容。

我最终发现 UWP 文件的访问与我过去使用 WPF 所做的不同,例如:https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions

例如,ApplicationData.Current.LocalFolder 将返回一个 StorageFolder 对象,其中包含 CreateFileGetItemsAsync 等方法。如果我想将用户数据保存在文件。请参阅https://docs.microsoft.com/fr-fr/uwp/api/windows.storage.storagefolder?view=winrt-19041 了解更多信息。

鉴于我存储用户数据的方式发生了重大变化,我将考虑在 sqlite 数据库上使用 EntityFrameworkCore: https://docs.microsoft.com/en-us/windows/uwp/data-access/sqlite-databases

我希望分享这次冒险可以帮助其他面临同样情况的人。

祝大家编码愉快!

【讨论】:

以上是关于运行 .NET Core 3.0 时未经授权访问 C:\Users的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Asp.Net CORE 中使用 JWT 获得 401 未经授权?

在 ASP.NET Core 中未经授权时重定向到登录

.net Core 3 Web API JWT 未经授权

未经授权时如何将用户重定向到 ASP.NET 页面?

将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误

使用 Paypal REST API 进行未经授权的访问