如何在 Asp.Net 核心 API 中获取具有给定目录名称的字符串变量中的目录路径

机器人警察

我正在尝试获取 API 控制器中文件夹“Images”的完整路径名。但以下语法不起作用。如果有人可以提供帮助,将不胜感激

string path = HttpContext.Current.Server.MapPath("~/Images/");
Chaodeng

您不需要 System.Web 或 HttpContext。你可以阅读从Web应用程序的根路径IHostingEnvironment .WebRootPath在ASP.NET核心2.x或IWebHostEnvironment .WebPath在ASP.NET核心3.x中

依赖注入机制知道该接口,这意味着您可以将其作为依赖项添加到控制器或服务中,例如:

public class MyController : Controller 
{
    private IWebHostEnvironment _hostingEnvironment;

    public MyController(IWebHostEnvironment environment) {
        _hostingEnvironment = environment;
    }

    [HttpGet]
    public IActionResult Get() {

        var path = Path.Combine(_hostingEnvironment.WebRootPath, "Images");
        ...
    }

您可以将根路径传递给类的构造函数。毕竟,名为 ImagesFilesRepository 的类只关心它的本地文件夹,而不关心它是否托管在 Web 或控制台应用程序上。为此,这些方法不应该是静态的:

public class ImagesFilesRepository 
{

    public ImagesFilesRepository (string rootPath)
    {
        _rootPath=rootPath;
    }

    public DriveService GetService()
    {
         //Operations.... 

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

}

您可以在 Startup.cs 中将该类注册为服务:

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddSignleton<GoogleDriveFilesRepository>(_ =>{
            var gdriveRoot=Path.Combine(_env.WebRootPath,"GoogleDriveFiles");
            return new GoogleDriveFilesRepository(gdrivePath);
        });
        ...
    }
}

这个类现在可以用作对控制器的依赖。不再需要在控制器中使用 IWebHostEnvironment :

public class MyController : Controller 

{
    private ImagesFilesRepository _gdrive;

    public MyController(ImagesFilesRepository gdrive) {
        _gdrive=gdrive;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在asp.net核心Web Api中写入连接字符串?

如何在 ASP.NET 核心 WEB API 控制器中获取 OpenID 信息

如何在asp.net核心Web API中阅读发布的FormUrlEncodedContent?

如何在asp.net核心API中从子对象设置对象属性值?

如何在dockerfile中更新asp.net核心版本

如何在asp.net核心SignalR中遍历用户?

ASP.NET 核心 API

如何在没有Powershell的Windows 10 IoT核心中托管Asp.Net 5 Web API

使用asp.net核心API从外部API获取数据

如何在 Asp.net 核心中获取文件路径以在 Azure Dev Ops 中工作

如何使autofac KeyFilter在asp.net核心Web API中工作?

如何在ASP.NET Web API核心中全局启用CORS

如何在我上传文件的Asp.Net核心Web API端点上进行集成测试?

如何在asp.net核心中使用AJAX从动作方法中获取数据?

如何在ASP.NET核心WEB API中验证Azure AD v2生成的OpenID Connect访问令牌?

如何在asp.net核心控制器中绘制图片

如何在asp.net核心应用程序中设置路由

如何在asp.net核心中间件中做DI?

如何在asp.net核心剃须刀页面中重用HTML代码段?

如何在asp.net核心中的字段中添加swagger示例?

ASP.NET 5(核心):如何在会话缓存(ISession)中存储对象?

Asp.Net核心MVC6如何在Identity 3中初始添加角色

如何在asp.net核心应用程序中运行ssis包?

如何在IActionFilter Asp.net核心的OnActionExecuting(ActionExecutingContext上下文)中读取请求正文

如何在 Asp .net 核心网站(如博客)中制作“喜欢/不喜欢”按钮?

如何在子路径上找到一个Asp.net核心站点

如何从 ASP.Net 核心中的 PostgreSQL 函数获取数据

如何在视图的asp.net核心ViewData []对象中正确串联多个变量

如何在视图中获取会话值asp.net核心