【问题标题】:How to represent MVC Core Controller Action method same in Core Razor Pages 2.0如何在 Core Razor Pages 2.0 中表示相同的 MVC Core Controller Action 方法
【发布时间】:2019-02-05 19:39:07
【问题描述】:

我想从 数据库 执行 上传和下载。在 MVC Core 中它可以正常工作,但 我无法转换 MVC控制器方法进入 Razor Pages 的 Handler 方法。 如何做到这一点。如果有人提供帮助,我将非常高兴。以下是有关我的应用程序的更多详细信息

MVC Core 的控制器方法

[HttpPost]  
  public async Task<IActionResult> UploadFile(IFormFile file)  
  {  
      if (file == null || file.Length == 0)  
          return Content("file not selected");  
  
      var path = Path.Combine(  
                  Directory.GetCurrentDirectory(), "wwwroot",   
                  file.GetFilename());  
  
      using (var stream = new FileStream(path, FileMode.Create))  
      {  
          await file.CopyToAsync(stream);  
      }  
  
      return RedirectToAction("Files");  
  }  
  
  public async Task<IActionResult> Download(string filename)  
  {  
      if (filename == null)  
          return Content("filename not present");  
  
      var path = Path.Combine(  
                     Directory.GetCurrentDirectory(),  
                     "wwwroot", filename);  
  
      var memory = new MemoryStream();  
      using (var stream = new FileStream(path, FileMode.Open))  
      {  
          await stream.CopyToAsync(memory);  
      }  
      memory.Position = 0;  
      return File(memory, GetContentType(path), Path.GetFileName(path));  
  } 
如何在 Razor 页面中表示上述方法

【问题讨论】:

    标签: c# asp.net-core-mvc razor-pages


    【解决方案1】:

    尝试按照以下步骤更改您的 Razor 页面:

    1. Pages 中添加File Razor 页面
    2. 它的内容是

      public class FileModel : PageModel
      {
          public void OnGet()
          {
      
          }
          [BindProperty]
          public IFormFile FormFile { get; set; }
          [IgnoreAntiforgeryToken]
          public async Task<IActionResult> OnPostUploadFileAsync()
          {
      
              return RedirectToPage("Index");
          }
          public async Task<IActionResult> OnGetDownloadAsync(string filename)
          {
              if (filename == null)
                  return Content("filename not present");
      
              var path = Path.Combine(
                          Directory.GetCurrentDirectory(),
                          "wwwroot", filename);
      
              var memory = new MemoryStream();
              using (var stream = new FileStream(path, FileMode.Open))
              {
                  await stream.CopyToAsync(memory);
              }
              memory.Position = 0;
              return File(memory, "application/octet-stream", Path.GetFileName(path));
          }
      }
      
    3. 它的视图是

      @page
      @model TestRazor.Pages.FileModel
      @{
          ViewData["Title"] = "File";
      }
      
      <h2>File</h2>
      
      <div class="row">
          <div class="col-md-4">
              <form method="post" asp-page-handler="UploadFile" enctype="multipart/form-data">
                  <div class="form-group">
                      <label asp-for="FormFile" class="control-label"></label>
                      <input asp-for="FormFile" type="file" class="form-control" style="height:auto" />
                      <span asp-validation-for="FormFile" class="text-danger"></span>
                  </div>
                  <input type="submit" value="Upload" class="btn btn-default" />
              </form>
          </div>
      </div>
      
    4. OnGetDownloadAsync 的请求是https://localhost:44332/file?handler=download&amp;filename=test.txt

    5. 上传加载文件,转https://localhost:44332/file,点击上传按钮上传文件

    有关 Razor 页面的更多信息,请参阅Upload files to a Razor Page in ASP.NET Core

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2018-08-16
      • 2018-11-08
      • 2020-05-08
      • 2018-10-29
      • 2019-06-28
      • 2018-10-16
      • 1970-01-01
      • 2019-04-05
      相关资源
      最近更新 更多