C#: Как установить System.Web - PullRequest
       40

C#: Как установить System.Web

1 голос
/ 25 февраля 2020

Я использую Visual Studio Code версию 1.42 на моем Ubuntu 18.04. Я только что успешно установил sudo dotnet add package Google.Apis.Drive.v3 через терминал, но не могу найти способ установить System.Web на свой C# проект.

web

Я пробовал много разных способов:

1) sudo dotnet add package Microsoft.AspNet.WebApi

2) sudo dotnet add package Microsoft.AspNet.Mvc -Version 5.2.7

3) sudo dotnet add package Microsoft.AspNet.Mvc

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
//using System.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;


namespace IHostingEnvironmentExample.Controllers
{
    public class HomeController : Controller
    {
        private IHostingEnvironment _env;
        public HomeController(IHostingEnvironment env)
        {
            _env = env;
        }
        public IActionResult Index()
        {
            var webRoot = _env.WebRootPath;
            var file = System.IO.Path.Combine(webRoot, "test.txt");
            System.IO.File.WriteAllText(file, "Hello World!");
            return View();
        }
    }
}


namespace WebApi2.Models
{
    public class GoogleDriveFilesRepository 
    {
       //defined scope.
        public static string[] Scopes = { DriveService.Scope.Drive };
        // Operations....

        //create Drive API service.
        public static DriveService GetService()
        {
             //Operations.... 

        public static List<GoogleDriveFiles> GetDriveFiles()
        {
            // Other operations....
        }

       //file Upload to the Google Drive.
        public static void FileUpload(HttpPostedFileBase file)
        {
            if (file != null && file.ContentLength > 0)
            {
                DriveService service = GetService();

                string path = Path.Combine(HttpContext.Current.Server.MapPath("~/GoogleDriveFiles"),
                Path.GetFileName(file.FileName));
                file.SaveAs(path);

                var FileMetaData = new Google.Apis.Drive.v3.Data.File();
                FileMetaData.Name = Path.GetFileName(file.FileName);
                FileMetaData.MimeType = MimeMapping.GetMimeMapping(path);

                FilesResource.CreateMediaUpload request;

                using (var stream = new System.IO.FileStream(path, System.IO.FileMode.Open))
                {
                    request = service.Files.Create(FileMetaData, stream, FileMetaData.MimeType);
                    request.Fields = "id";
                    request.Upload();
                }
            }
        }


        //Download file from Google Drive by fileId.
        public static string DownloadGoogleFile(string fileId)
        {
            DriveService service = GetService();

            string FolderPath = System.Web.HttpContext.Current.Server.MapPath("/GoogleDriveFiles/");
            FilesResource.GetRequest request = service.Files.Get(fileId);

            string FileName = request.Execute().Name;
            string FilePath = System.IO.Path.Combine(FolderPath, FileName);

            MemoryStream stream1 = new MemoryStream();

            request.MediaDownloader.ProgressChanged += (Google.Apis.Download.IDownloadProgress progress) =>
            {
                switch (progress.Status)
                {
                    case DownloadStatus.Downloading:
                        {
                            Console.WriteLine(progress.BytesDownloaded);
                            break;
                        }
                    case DownloadStatus.Completed:
                        {
                            Console.WriteLine("Download complete.");
                            SaveStream(stream1, FilePath);
                            break;
                        }
                    case DownloadStatus.Failed:
                        {
                            Console.WriteLine("Download failed.");
                            break;
                        }
                }
            };
            request.Download(stream1);
            return FilePath;
        }
    }
}

Пост, с которым я консультировался, чтобы найти решение к этой проблеме были эта , эта , а также эта . Я наткнулся на это тоже , которое, казалось, было связано, но не повезло. Также этот последний был полезен, однако я не совсем понимаю, какой тип пакета установить.

спасибо за руководство по решению этой проблемы.

1 Ответ

1 голос
/ 26 февраля 2020

В соответствии с кодом, который вы показали, вы пытаетесь использовать System.Web.HttpContext.Current.Server.MapPath, которого в действительности нет. NET Core.

Больше нет HttpContext stati c, пригодного для использования в ASP. NET Core вместе с System.Web полностью.

Чтобы заменить «Server.MapPath», вы можете следовать некоторым указаниям здесь: https://www.mikesdotnetting.com/Article/302/server-mappath-equivalent-in-asp-net-core

По сути, вам нужен доступ к IHostingEnvironment env объекту, который ASP. NET Core будет успешно внедрять.

Я бы порекомендовал не использовать методы stati c для использования внедрения зависимости конструктора, который выполняется в конструкторе контроллера автоматически.

В противном случае вы также можете вызвать службу зависимостей для получения экземпляра (все детали использования службы зависимостей здесь немного выходят за рамки, но вы можете прокомментировать, если это не ясно)

Из этого вы сможете получить путь к серверу:

public class HomeController : Controller 
{ 
    private IHostingEnvironment _env;
    // Injection of IHostingEnvironment dependency through constructor
    public HomeController(IHostingEnvironment env)
    {
        _env = env;
    }

    public void MyMethod() 
    {
        // here you get your replacement of "Server.MapPath" :
        var serverPath = _env.WebRootPath;


        // ...
    }
}

См. также связанные вопросы и ответы: Как использовать IHostingEnvironment

...