Как представить метод действия основного контроллера MVC таким же в Core Razor Pages 2.0 - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу выполнить Загрузка и выгрузка из База данных .In MVC Core работает правильно, но Я не могу преобразовать метод контроллера MVC вМетод обработчика Razor Pages. Как это сделать. Я буду очень рад, если кто-нибудь поможет. Ниже приведены подробные сведения о моих приложениях

Методы контроллера 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 Pages

1 Ответ

0 голосов
/ 05 февраля 2019

Попробуйте изменить страницу Razor, следуя приведенным ниже инструкциям:

  1. Добавить File Страница Razor в Pages
  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&filename=test.txt

  5. для загрузкизагрузите файл, перейдите к https://localhost:44332/file и нажмите кнопку загрузки, чтобы загрузить файл

Для получения дополнительной информации о странице Razor см. Загрузка файлов на страницу Razor в ASP.NET Core.

...