从外部库中提供静态文件

时间:2017-01-04 15:40:09

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

我试图提供外部库中的静态文件。

我已经完成了Controller和Views的工作,但是我无法从该库中加载资源(javascript,images,...)。

这是我的Startup.cs

lines = null;

这是我对外部库的project.json的buildOptions设置:

    public void ConfigureServices(IServiceCollection services)
    {
    //...
    var personAssembly = typeof(PersonComponent.Program).GetTypeInfo().Assembly;
    var personEmbeddedFileProvider = new EmbeddedFileProvider(
          personAssembly,
          "PersonComponent"
       );

     services
       .AddMvc()
       .AddApplicationPart(personAssembly)
       .AddControllersAsServices();

    services.Configure<RazorViewEngineOptions>(options =>
                {
                    options.FileProviders.Add(personEmbeddedFileProvider);
                });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        //...
        var personAssembly = typeof(PersonComponent.Program).GetTypeInfo().Assembly;
        var personEmbeddedFileProvider = new EmbeddedFileProvider(
            personAssembly,
            "PersonComponent"
        );

        app.UseStaticFiles();
        //This not work
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new CompositeFileProvider(
                personEmbeddedFileProvider
            )
        });
    }

谁能告诉我什么是错的?

谢谢大家(对不起,我的英语不好)

1 个答案:

答案 0 :(得分:4)

我知道这是一个老问题,但我面临同样的问题,对我来说,解决方案是创建嵌入式文件提供程序作为参数传递外部程序集和一个字符串,如&#34; assemblyName.wwwroot&#34 ;

假设您的程序集名称是 PersonComponent

String sharedPreference = attrs.getAttributeValue(null, "sharedPreference");
if( sharedPreference == null || sharedPreference.isEmpty()) {
    prefs = PreferenceManager.getDefaultSharedPreferences(context);
} else {
    prefs = context.getSharedPreferences(sharedPreference, MODE_PRIVATE);
}

然后您必须在 UserStaticFiles 调用

中使用此文件提供程序
    var personAssembly = typeof(PersonComponent.Program).GetTypeInfo().Assembly;
    var personEmbeddedFileProvider = new EmbeddedFileProvider(
        personAssembly,
        "PersonComponent.wwwroot"
    );

Optionaly您可以使用替代内容请求路径,这样您就可以使用不同的URL获取本地和外部资源。 要执行此操作,请在创建app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions { FileProvider = personEmbeddedFileProvider });

时填写RequestPath变量
StaticFileOptions