IOException с WriteAllText в ядре aspnet - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть простой контроллер MVC, который является просто оболочкой для некоторых файлов:

public class ThingyController : Controller
{
    public IActionResult Index()
    {
        return View("Pages/Test.cshtml");
    }

    public IActionResult Get(string id)
    {
        byte[] filecontents = System.IO.File.ReadAllBytes(@"C:\thingies\" + id + ".json");
        return File(filecontents, "application/json");
    }

    [HttpPost]
    [IgnoreAntiforgeryToken]
    [DisableRequestSizeLimit]
    public IActionResult Update(string id)
    {
        byte[] bytes;
        using (MemoryStream ms = new MemoryStream())
        {
            Request.Body.CopyTo(ms);
            bytes = ms.ToArray();
        }
        System.IO.File.WriteAllBytes(@"C:\thingies\" + id + ".json", bytes);
        return StatusCode(200);
    }

    [HttpPost]
    [IgnoreAntiforgeryToken]
    public IActionResult Create(string id)
    {
        System.IO.File.WriteAllText(@"C:\thingies\" + id + ".json", "{}");
        return StatusCode(200);
    }

    [HttpPost]
    [IgnoreAntiforgeryToken]
    public IActionResult Delete(string id)
    {
        System.IO.File.Delete(@"C:\thingies\" + id + ".json");
        return StatusCode(200);
    }
}

Я продолжаю получать следующую ошибку при использовании этих методов:

Система.IO.IOException: процесс не может получить доступ к файлу 'C: \ thingies \ test.json', поскольку он используется другим процессом.

Это может быть только мое веб-приложение ядра dotnet, которое обращается к этимфайлы, и я когда-либо использую только однострочные операции System.IO.File, как вы можете видеть, поэтому они должны всегда корректно удаляться / закрываться.

Почему тогда я получаю эти ошибки о другом процессе, использующем их?Это как-то связано с тем, что ядро ​​dotnet запускает несколько процессов?Они мешают друг другу?Если бы это было так, по крайней мере, один из них должен быть успешно завершен, верно?Или, может быть, это как-то связано с тем, что поток управления внезапно завершается, когда вы возвращаете код состояния, до того как обработчики файлов могут быть правильно расположены?Это действительно не должно быть, но у меня были подобные проблемы в прошлом.

Почему?

...