2017-06-13 37 views
0

私はASP.NET Coreを初めて使用していますので、APIを作成して遊んでいます。 Windows Server 2016 Standard Edition VPSマシンでAPIを実行していますが、IIS 10がマシンにインストールされています。エラー(リモートデバッグ時) :ASP.NET Core System.UnauthorizedAccessException: 'C: ...'パスへのアクセスが拒否されました

{System.UnauthorizedAccessException:パスへのアクセスは 'C:\ホームネット\住宅\ 13' が拒否されSystem.IO.Win32FileStream..ctor(文字列のパス、にFileModeモード、FileAccessのアクセス、ファイル共有で 。共有、Int32 bufferSize、FileOptionsオプション、FileStream親) at System。 IO.Win32FileSystem.Open(String fullPath、FileModeモード、FileAccessアクセス、FileShare共有、Int32 bufferSize、FileOptionsオプション、FileStream親) at System.IO.FileStream.Init(文字列パス、FileModeモード、FileAccessアクセス、FileShare共有、Int32 (System.IO.FileStream..ctor(String path、FileMode mode)) C:\ Users \ okuhl \ Documents \ HomeNet \ Web APIのHomeNetAPI.Controllers.HouseController.d__6.MoveNext()で にある\ HomeNetAPI \ src \ HomeNetAPI \ Controllers \ HouseController.cs:line 83}

ディレクトリが存在しない場合は作成されるため、これは奇妙です。

if (resultHouse != null) 
{ 
    if (!Directory.Exists($"C:/HomeNET/Houses/{resultHouse.HouseID}")) 
    { 
     Directory.CreateDirectory($"C:/HomeNET/Houses/{resultHouse.HouseID}"); 
    } 

    String fileName = new FileInfo(imageFile.FileName).Name; 
    String fileExtension = new FileInfo(imageFile.FileName).Extension; 
    using (var fileStream = new FileStream($"C:/HomeNET/Houses/{resultHouse.HouseID}", 
     FileMode.Create)) //Bombs out after this line 
    { 
     var result = imageFile.CopyToAsync(fileStream); 
     if (result.IsCompleted) 
     { 
      newHouse.HouseImage = Path.Combine($"C:/HomeNET/Houses/{resultHouse.HouseID}", $".{fileExtension}"); 
      var updateResult = await Task.Run(() => 
      { 
       return houseRepository.UpdateHouse(newHouse); 
      }); 
      if (updateResult != null) 
      { 
       response.DidError = false; 
       response.Message = $"House {newHouse.Name} has been created successfully! Invite friends ad family to your house!"; 
       response.Model = newHouse; 
       return Ok(response); 
      } 
      else 
      { 
       response.DidError = true; 
       response.Message = "Something went wrong with creating the house. Please try again"; 
       response.Model = newHouse; 
       return BadRequest(response); 
      } 
     } 
     else 
     { 
      response.DidError = true; 
      response.Message = $"Something Went wrong with creating your house. House image could not be saved onto the system. \n {result.Exception.Message}"; 
      response.Model = newHouse; 
      return BadRequest(response); 
     } 
    } 
} 

私はこのフォルダを誰もが利用できるようにしようとしていますが、それは動作しませんでした。私はまた、フォルダを変更するための私のAppPoolのアクセス許可を与えてみましたが、それは動作しませんでした。

ヒントは素晴らしいです。

答えて

1

アプリケーションプールを実行しているユーザーを確認してください(ここの手順:https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities)。

そのユーザーがCドライブにアクセスできない場合、書き込みは失敗します。

(また:あなたのコード内で何度も何度もパスをコーディングしないようにしてくださいまだ良いのconstとしてC:/HomeNET/Houses/を宣言し、それを参照してください。そのように、または、web.configファイルからそれを読む。)

関連する問題