访问ASP.NET Core IFileProvider(Razor)中的请求对象

时间:2017-03-26 02:50:23

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

我在ASP.NET Core项目中有一个用于RazorViewEngineOptions的自定义IFileProvider。是否可以在IFileProvider中的GetFileInfo中访问请求对象?

void Update()
{
    if (Input.GetKeyDown(KeyCode.Return))
    {
        Debug.Log("returning to checkpoint");
        tf.position = Checkpoint.spawnPoint.position;
    }
}

Startup.cs:

public class DBViewProvider : IFileProvider
{
    public IFileInfo GetFileInfo(string subpath)
    {
        // access to Request here? 
    }
}

DBViewProvider只有一个全局实例,所以我无法为每个请求注入IHttpContextAccessor。

2 个答案:

答案 0 :(得分:0)

IHttpContextAccessor使用线程本地,你不需要为每个请求注入一个。

答案 1 :(得分:0)

这就是我现在最终要做的事情。

创建一个辅助类来保存静态IServiceProvider。

public static class MyServiceLocator
{   
    public static IServiceProvider ServiceProvider;

    public static void Init(IServiceProvider provider)
    {       
        ServiceProvider = provider; 
    }
}

在Startup.cs中我初始化了ServiceProvider:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{    
    MyServiceLocator.Init(serviceProvider);
}

在我的IFileProvider中,我得到了IHttpContextAccessor:

using Microsoft.Extensions.DependencyInjection; 

...

public IFileInfo GetFileInfo(string subpath)
{
    IHttpContextAccessor httpContextAccessor = MyServiceLocator.ServiceProvider.GetService<IHttpContextAccessor>();         
}