【问题标题】:Access denied file in asp.net core在 asp.net 核心中访问被拒绝的文件
【发布时间】:2018-08-02 15:43:10
【问题描述】:


当我将我的项目发布到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\wwwroot\images\UserProfile\pic_50.jpg' 被拒绝。 在 System.IO.FileStream.OpenHandle(FileMode 模式、FileShare 共享、FileOptions 选项) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)

动作控制器

[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");  
}

startup.cs

public void Configure(ILoggerFactory loggerFactory, IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
}

如何解决这个异常?

【问题讨论】:

  • 您的应用程序池似乎没有足够的权限。
  • 应用程序池标识很可能无权访问该路径。尝试让它访问c:\inetpub(及其所有子目录)。如果应用程序池作为模拟用户运行,您应该选择与inetpub 不同的文件夹。

标签: c# iis asp.net-core


【解决方案1】:

右键wwwroot文件夹->属性->安全选项卡->点击Edit按钮->输入IIS AppPool\DefaultAppPool用户->点击Check names->确定->然后给它@987654325 @。

【讨论】:

  • 不起作用,这些更改需要重新启动服务器还是?
  • 这对我有用,除了用户名叫做IIS IUSRS,我发现它列在添加用户菜单的高级按钮下。
  • 给所有的写权限是不是有风险?
  • 这不是一切。它只是 IIS 中应用程序池的用户。其余部分应由您的应用控制。
【解决方案2】:

工作正常...

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);

            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2013-12-15
    相关资源
    最近更新 更多