使用 MVC IIS 8 错误插入文件夹 C# 发生未处理的访问异常
Insert Folder C# with MVC IIS 8 Error An unhandled access exception has occurred
我在 Windows 10 Pro、VS 2019 上进行本地调试。
这将 运行 在我的本地机器上很好,但在网络服务器上却不行
我的服务器是带有 IIS 8 的 Windows Server 2012 R2。
有人知道问题出在哪里吗?
这是我的代码:
查看
$.ajax({
url: 'AddFolder',
type: 'post',
data: JSON.stringify(dto),
dataType: 'json',
contentType: 'application/json;charset=utf-8',
success: function (data) {
alert("Insert Folder Success");
$('#foldername').val("");
},
error: function (ex) {
alert(JSON.stringify(ex));
}
});
控制器
public ActionResult AddFolder(videopath model)
{
string conSQL = mySetting.ConnectionString;
SqlDataAdapter dataAdapt = new SqlDataAdapter();
SqlConnection conn = new SqlConnection(conSQL);
List<string> ModelData = new List<string>();
string result;
try
{
string path1 =@"\kalbox\Video\";
string path2 = Path.Combine(path1, model.FolderName);
if (!Directory.Exists(path2))
{
Directory.CreateDirectory(path2);
using (SqlCommand command = new SqlCommand("InsertFolderPath", conn))
{
conn.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@FolderName", System.Data.SqlDbType.VarChar);
command.Parameters["@FolderName"].Value = model.FolderName;
command.Parameters.Add("@FolderPath", System.Data.SqlDbType.VarChar);
command.Parameters["@FolderPath"].Value = path2;
result = (string)command.ExecuteScalar();
ModelData.Add(result);
conn.Close();
}
}
else
{
Console.WriteLine("Folder Exists");
}
}
catch (Exception ex)
{
throw ex;
}
return Json(ModelData, JsonRequestBehavior.AllowGet);
}
这是我的错误:
ASP.NET 网页输出:访问路径 '\\kalbox\Video31' 被拒绝
应用程序事件日志:
Event code: 4011
Event message: An unhandled access exception has occurred.
Event time: 4/15/2021 4:41:57 PM
Event time (UTC): 4/15/2021 9:41:57 AM
Event ID: 0c49e37dc23b486b8537561bbc024a5b
Event sequence: 7
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/ROOT/Video_OPL-66-132629533163447222
Trust level: Full
Application Virtual Path: /Video_OPL
Application Path: D:\Video_Training\
Machine name: SERVERNAME
Process information:
Process ID: 12844
Process name: w3wp.exe
Account name: NT AUTHORITY\NETWORK SERVICE
Request information:
Request URL: http:********
Request path: /Video_OPL/Home/AddFolder
User host address: ******
User: domain\Agus.Suhardi
Is authenticated: True
Authentication Type: Negotiate
Thread account name: NT AUTHORITY\NETWORK SERVICE
- F12 控制台浏览器 Google Chrome:加载资源失败:服务器响应状态 500(内部服务器错误)
我已经找到我的 Windows 身份验证,消息框显示我的名字(domainAgus.Suhardi,没有像 [=56 这样的斜杠=].苏哈迪 )
var winlogon = '@HttpContext.Current.User.Identity.Name';
alert (winlogon);
这是我的许可 Kalbox 文件夹
FYI 文件夹 kalbox 仅添加用户 AD (Active Directory)
我的 IIS 用户名是
NT AUTHORITY\NETWORK 服务
此错误可能是由于您的 asp.net 帐户 {MACHINE}\ASPNET 没有对路径“\kalbox\Video31”的写入权限造成的。
您可以尝试以下步骤来解决这个问题:
右键单击文件夹属性 > 安全选项卡 > 编辑 > 添加 > 位置 > 选择您的本地计算机 > 单击确定 > 在“输入对象名称 select”下方键入 ASPNET > 单击检查名称选中复选框以获得所需的访问权限(完全控制)。如果它对您不起作用,请对网络服务执行相同的操作。
现在这应该显示您的本地 {MACHINENAME}\ASPNET 帐户,然后您设置对此帐户的写入权限。
否则,如果应用程序通过 模拟,身份将是匿名用户(通常 IUSR_MACHINENAME)或经过身份验证的请求用户。
我的案子已经解决了
您可以尝试添加用户 Everyone 并授予完全控制权
顺便说一句,请 Samwu 回答你,你是对的,我的帐户 IIS 没有写入权限
我在 Windows 10 Pro、VS 2019 上进行本地调试。 这将 运行 在我的本地机器上很好,但在网络服务器上却不行 我的服务器是带有 IIS 8 的 Windows Server 2012 R2。 有人知道问题出在哪里吗?
这是我的代码:
查看
$.ajax({
url: 'AddFolder',
type: 'post',
data: JSON.stringify(dto),
dataType: 'json',
contentType: 'application/json;charset=utf-8',
success: function (data) {
alert("Insert Folder Success");
$('#foldername').val("");
},
error: function (ex) {
alert(JSON.stringify(ex));
}
});
控制器
public ActionResult AddFolder(videopath model)
{
string conSQL = mySetting.ConnectionString;
SqlDataAdapter dataAdapt = new SqlDataAdapter();
SqlConnection conn = new SqlConnection(conSQL);
List<string> ModelData = new List<string>();
string result;
try
{
string path1 =@"\kalbox\Video\";
string path2 = Path.Combine(path1, model.FolderName);
if (!Directory.Exists(path2))
{
Directory.CreateDirectory(path2);
using (SqlCommand command = new SqlCommand("InsertFolderPath", conn))
{
conn.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@FolderName", System.Data.SqlDbType.VarChar);
command.Parameters["@FolderName"].Value = model.FolderName;
command.Parameters.Add("@FolderPath", System.Data.SqlDbType.VarChar);
command.Parameters["@FolderPath"].Value = path2;
result = (string)command.ExecuteScalar();
ModelData.Add(result);
conn.Close();
}
}
else
{
Console.WriteLine("Folder Exists");
}
}
catch (Exception ex)
{
throw ex;
}
return Json(ModelData, JsonRequestBehavior.AllowGet);
}
这是我的错误:
ASP.NET 网页输出:访问路径 '\\kalbox\Video31' 被拒绝
应用程序事件日志:
Event code: 4011 Event message: An unhandled access exception has occurred. Event time: 4/15/2021 4:41:57 PM Event time (UTC): 4/15/2021 9:41:57 AM Event ID: 0c49e37dc23b486b8537561bbc024a5b Event sequence: 7 Event occurrence: 1 Event detail code: 0 Application information: Application domain: /LM/W3SVC/1/ROOT/Video_OPL-66-132629533163447222 Trust level: Full Application Virtual Path: /Video_OPL Application Path: D:\Video_Training\ Machine name: SERVERNAME Process information: Process ID: 12844 Process name: w3wp.exe Account name: NT AUTHORITY\NETWORK SERVICE Request information: Request URL: http:******** Request path: /Video_OPL/Home/AddFolder User host address: ****** User: domain\Agus.Suhardi Is authenticated: True Authentication Type: Negotiate Thread account name: NT AUTHORITY\NETWORK SERVICE
- F12 控制台浏览器 Google Chrome:加载资源失败:服务器响应状态 500(内部服务器错误)
我已经找到我的 Windows 身份验证,消息框显示我的名字(domainAgus.Suhardi,没有像 [=56 这样的斜杠=].苏哈迪 )
var winlogon = '@HttpContext.Current.User.Identity.Name';
alert (winlogon);
这是我的许可 Kalbox 文件夹
FYI 文件夹 kalbox 仅添加用户 AD (Active Directory) 我的 IIS 用户名是
NT AUTHORITY\NETWORK 服务
此错误可能是由于您的 asp.net 帐户 {MACHINE}\ASPNET 没有对路径“\kalbox\Video31”的写入权限造成的。
您可以尝试以下步骤来解决这个问题:
右键单击文件夹属性 > 安全选项卡 > 编辑 > 添加 > 位置 > 选择您的本地计算机 > 单击确定 > 在“输入对象名称 select”下方键入 ASPNET > 单击检查名称选中复选框以获得所需的访问权限(完全控制)。如果它对您不起作用,请对网络服务执行相同的操作。
现在这应该显示您的本地 {MACHINENAME}\ASPNET 帐户,然后您设置对此帐户的写入权限。
否则,如果应用程序通过 模拟,身份将是匿名用户(通常 IUSR_MACHINENAME)或经过身份验证的请求用户。
我的案子已经解决了 您可以尝试添加用户 Everyone 并授予完全控制权
顺便说一句,请 Samwu 回答你,你是对的,我的帐户 IIS 没有写入权限