C# asp.net core中的文件被拒绝访问

C# asp.net core中的文件被拒绝访问,c#,iis,asp.net-core,C#,Iis,Asp.net Core,当我将我的项目发布到iis并在浏览器上上传图片时,此操作失败,并在logger sysytem 发生未经处理的异常:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwwroot\images\UserProfile\pic_50.jpg”。System.UnauthorizedAccessException:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwroot\images\


当我将我的项目发布到
iis
并在浏览器上上传图片时,此操作失败,并在
logger sysytem

发生未经处理的异常:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwwroot\images\UserProfile\pic_50.jpg”。System.UnauthorizedAccessException:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwroot\images\UserProfile\pic_50.jpg”。 位于System.IO.FileStream.OpenHandle(文件模式、文件共享、文件选项) 位于System.IO.FileStream..ctor(字符串路径、文件模式、文件访问访问、文件共享、Int32 bufferSize、文件选项)

动作控制器

[HttpPost("[action]")]
public async Task<IActionResult> EditPhoto()
{
    var uploadsRootFolder = Path.Combine(_env.WebRootPath, "images\\UserProfile");
    var files = Request.Form.Files;     
    foreach (var file in files)
    {       
        if (file == null || file.Length == 0)
        {
            continue;
        }
        var filePath = Path.Combine(uploadsRootFolder, queryModel.Name  + files[0].FileName);
        using (var fileStream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(fileStream).ConfigureAwait(false);
        }
    }
    return Json("ok");  
}

如何解决此异常?

右键单击
wwwroot
文件夹->属性->安全选项卡->单击
Edit
按钮->输入
IIS-AppPool\DefaultAppPool
用户->单击
检查名称
->确定->然后授予它
写入权限
工作正常

string fileName = file_name+".pdf";

           string files = System.IO.Path.Combine("pdf/") + fileName;
            if (!System.IO.File.Exists(files))
            {
                return RedirectToAction("index", new { message = "File Not Found" });

            }
            else
            {

                byte[] fileBytes = System.IO.File.ReadAllBytes(files);
                return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, files);

            }

您的应用程序池似乎没有足够的权限。很可能应用程序池标识没有访问该路径的权限。尝试授予它访问
c:\inetpub
(及其所有子目录)的权限。如果应用程序池以模拟用户的身份运行,您应该选择一个不同于
inetpub
的文件夹。如果不工作,这些更改需要重新启动服务器,或者?这对我有效,但用户名名为
IIS IUSRS
,我在“添加用户”菜单的“高级”按钮下找到了它。
string fileName = file_name+".pdf";

           string files = System.IO.Path.Combine("pdf/") + fileName;
            if (!System.IO.File.Exists(files))
            {
                return RedirectToAction("index", new { message = "File Not Found" });

            }
            else
            {

                byte[] fileBytes = System.IO.File.ReadAllBytes(files);
                return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, files);

            }