Azure 文件共享 - 找不到文件 (404),即使它在我的应用程序中列出了文件

Azure File Share - File not found (404) even though it lists the files in my application

也许我在方法上调用了错误的任务操作,因为它在 MVC 项目上工作得很好。这是严格尝试在 Razor 页面上使用它,而不是 MVC。

当我调用 OnGetAsync() 时,我的页面确实填充了所有可用文件。但是,当我尝试下载文件时,它显示找不到文件。

DownloadStub 方法:

public async Task<IActionResult> DownloadStub(string id)
        {
            string fileStorageConnection = _configuration.GetValue<string>("fileStorageConnection");
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(fileStorageConnection);
            CloudFileShare share = storageAccount.CreateCloudFileClient().GetShareReference("test");
            CloudFileDirectory rootDir = share.GetRootDirectoryReference();
            CloudFileDirectory dir = rootDir.GetDirectoryReference(@"E000002/stubs");
            CloudFile file = dir.GetFileReference(id);

            if (!file.Exists())
            {
                ModelState.AddModelError(string.Empty, "File not found.");
                return Page();
            }
            else
            {
                await file.DownloadToStreamAsync(new MemoryStream());
                Stream fileStream = await file.OpenReadAsync();
                return File(fileStream, file.Properties.ContentType, file.Name);
            }

        }

cshtml 页面

<td>
    <a class="btn btn-primary" href="~/Files/DownloadStub?id=@data.FileName">Download</a>
</td>

当我尝试在该方法上设置断点时,它没有命中,我认为这是问题的一部分,但我不知道如何进一步调查它。

如果有帮助,请查看我对此页面的其他实现

对于 razor 页面,razor 页面中的页面方法名称与 mvc.It 中的操作方法不同,对于 get 方法和 OnPost 将是 like:OnGetMethodName post 方法的方法名称

参考:

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.1&tabs=visual-studio#multiple-handlers-per-page

像下面这样更改您的剃须刀页面:

<td>
    <a class="btn btn-primary" href="~/Files?id=@data.FileName&handler=DownloadStub">Download</a>
</td>

后端代码:

public class IndexModel : PageModel
{
    public void OnGet()
    {
       //...
    }
    public void OnGetDownloadStub(string id)
    {
       //do your stuff...
    }
}

结果: