无法在共享主机 (hostgator) 中 read/write 个文件
Unable to read/write files in shared hosting (hostgator)
我开发了 MVC 5 项目,它在本地文件服务器和其他主机(如主机托管,Go daddy)上运行良好,但是当我将它上传到共享主机(hostgator)时,它会抛出安全异常,即
异常详细信息: System.Security.SecurityException:请求类型 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的权限失败。
当我添加 <trust level="Full" />
时,错误变为 配置错误 即
说明:处理此请求所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改您的配置文件。
解析器错误消息:此配置节不能用于此路径。当站点管理员使用继承的配置文件锁定对此部分的访问时,会发生这种情况。
源错误:服务器上出现应用程序错误。此应用程序的当前自定义错误设置阻止远程查看应用程序错误的详细信息(出于安全原因)。但是,它可以通过本地服务器计算机上的浏览器 运行 查看。
有什么方法可以解决这个问题,还是我应该与托管服务提供商联系以提供完全信任?
您看到的行为是预料之中的 - 大多数(如果不是全部)共享托管服务提供商将不允许完全信任站点,部分原因是写入磁盘的能力。
您的选择:
- 停止使用光盘并将数据存储到数据库中(如果能够在服务器之间实际迁移、备份会带来额外好处...)
- 专用服务器托管(虚拟服务器、Azure/Amazon/Google 云中的 VM,...)- 成本将明显高于中等信任共享托管
- 找到一些允许完全信任的共享主机(也可能意味着 availability/performance 的零保证)
诀窍是在内存中工作,在我的例子中,我正在使用 EPPlus 库创建一个 Excel 文件
var stream = new MemoryStream(package.GetAsByteArray());
Response.AppendHeader("content-disposition", "attachment; filename=MyFile.xlsx");
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(stream.ToArray());
Response.End();
我在使用 Hostgator 时遇到了同样的问题。 Windows 共享托管计划。
- 您收到解析器错误消息只是因为您无法修改 web.config 文件中的信任级别。 (这就是为什么会变成配置错误的原因)
- Hostgator Plesk 中的 CAS 信任级别设置只是安慰剂。
- 解决方法:您应该将该文件夹的权限更改为完全控制您要写入的文件夹。 (您可以在 Plesk 中执行此操作)。
那你可以去:
File.Create(@"D:\InetPub\vhosts\<yourdomain>\httpdocs\App_Data\file.txt");
我看到你问这个问题已经一年了。从那以后你设法创建文件了吗?
我开发了 MVC 5 项目,它在本地文件服务器和其他主机(如主机托管,Go daddy)上运行良好,但是当我将它上传到共享主机(hostgator)时,它会抛出安全异常,即
异常详细信息: System.Security.SecurityException:请求类型 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的权限失败。
当我添加 <trust level="Full" />
时,错误变为 配置错误 即
说明:处理此请求所需的配置文件时发生错误。请查看下面的具体错误详细信息并适当修改您的配置文件。
解析器错误消息:此配置节不能用于此路径。当站点管理员使用继承的配置文件锁定对此部分的访问时,会发生这种情况。
源错误:服务器上出现应用程序错误。此应用程序的当前自定义错误设置阻止远程查看应用程序错误的详细信息(出于安全原因)。但是,它可以通过本地服务器计算机上的浏览器 运行 查看。
有什么方法可以解决这个问题,还是我应该与托管服务提供商联系以提供完全信任?
您看到的行为是预料之中的 - 大多数(如果不是全部)共享托管服务提供商将不允许完全信任站点,部分原因是写入磁盘的能力。
您的选择:
- 停止使用光盘并将数据存储到数据库中(如果能够在服务器之间实际迁移、备份会带来额外好处...)
- 专用服务器托管(虚拟服务器、Azure/Amazon/Google 云中的 VM,...)- 成本将明显高于中等信任共享托管
- 找到一些允许完全信任的共享主机(也可能意味着 availability/performance 的零保证)
诀窍是在内存中工作,在我的例子中,我正在使用 EPPlus 库创建一个 Excel 文件
var stream = new MemoryStream(package.GetAsByteArray());
Response.AppendHeader("content-disposition", "attachment; filename=MyFile.xlsx");
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(stream.ToArray());
Response.End();
我在使用 Hostgator 时遇到了同样的问题。 Windows 共享托管计划。
- 您收到解析器错误消息只是因为您无法修改 web.config 文件中的信任级别。 (这就是为什么会变成配置错误的原因)
- Hostgator Plesk 中的 CAS 信任级别设置只是安慰剂。
- 解决方法:您应该将该文件夹的权限更改为完全控制您要写入的文件夹。 (您可以在 Plesk 中执行此操作)。
那你可以去:
File.Create(@"D:\InetPub\vhosts\<yourdomain>\httpdocs\App_Data\file.txt");
我看到你问这个问题已经一年了。从那以后你设法创建文件了吗?