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 方法的方法名称。
参考:
像下面这样更改您的剃须刀页面:
<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...
}
}
结果:
也许我在方法上调用了错误的任务操作,因为它在 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 方法的方法名称。
参考:
像下面这样更改您的剃须刀页面:
<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...
}
}
结果: