C# ASP.NET核心-类库中的视图

C# ASP.NET核心-类库中的视图,c#,asp.net-core,asp.net-core-middleware,asp.net-core-3.0,C#,Asp.net Core,Asp.net Core Middleware,Asp.net Core 3.0,我试图使我的asp.net核心项目完全模块化。 因此,我对一些功能进行了分组,并将它们分别放在不同的类库中。 使用这种结构,我可以通过在asp.net项目中添加/删除dll引用来激活/停用功能 C#部分工作正常。像images/js/css/html这样的内容文件也构建在输出文件夹中,可以在html中引用而不会出现问题 但是如何使用html文件作为razor视图呢 示例类库(NoteModule): Program.cs 公共静态类程序 { 公共静态void Main(字符串[]args) {

我试图使我的asp.net核心项目完全模块化。 因此,我对一些功能进行了分组,并将它们分别放在不同的类库中。 使用这种结构,我可以通过在asp.net项目中添加/删除dll引用来激活/停用功能

C#部分工作正常。像images/js/css/html这样的内容文件也构建在输出文件夹中,可以在html中引用而不会出现问题

但是如何使用html文件作为razor视图呢

示例类库(NoteModule):


Program.cs

公共静态类程序
{
公共静态void Main(字符串[]args)
{
var assembly=assembly.GetEntryAssembly();
var assemblyLocation=assembly.Location;
var assemblyPath=Path.GetDirectoryName(assemblyLocation);
var builder=Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(x=>x.UseWebRoot(assemblyPath.UseStartup());
var build=builder.build();
build.Run();
}
}

Startup.cs

公共类启动
{
公共IConfiguration配置{get;}
公共启动(IConfiguration配置)
{
配置=配置;
}
public void配置服务(IServiceCollection服务)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseHsts();
}
app.UseDefaultFiles(新的DefaultFilesOptions
{
FileProvider=新的物理FileProvider(Path.Combine(env.WebRootPath,“视图”),
RequestPath=“/Views”,
});
app.UseStaticFiles(新的StaticFileOptions
{
FileProvider=新的物理FileProvider(Path.Combine(env.WebRootPath,“资产”),
RequestPath=“/Assets”,
});
app.UseStaticFiles(新的StaticFileOptions
{
FileProvider=新的物理FileProvider(Path.Combine(env.WebRootPath,“视图”),
RequestPath=“/Views”,
});
//app.UseMiddleware();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(x=>
{
x、 MapControllerRoute(“默认”,“{controller=“+Constants.ROUTE\u default\u controller+”}/{action=“+Constants.ROUTE\u default\u action+”}/{id?}”);
x、 MapRazorPages();
});
}
}

我试图通过自定义中间件将html数据从文件路径注入响应流。 但这样就不会执行Razor命令

我如何解决它?有没有更简单的方法

ContentMiddleware.cs

公共类内容中间件
{
private RequestDelegate Next{get;}
私有IWebHostEnvironment环境{get;}
公共内容中间件(RequestDelegate下一步,IWebHostEnvironment环境)
{
this.Next=Next;
this.Environment=env;
}
公共异步任务调用(HttpContext上下文)
{
var route=context.Request.Path.Value.Substring(1).替换(“/”,“\\”);
var contentDirectory=Path.Combine(this.Environment.WebRootPath,“视图”);
var contentPath=newfileinfo(Path.Combine(contentDirectory,$“{route}.cshtml”);
var buffer=await File.readAllByteAsync(contentPath.FullName);
context.Response.StatusCode=(int)HttpStatusCode.OK;
context.Response.ContentLength=buffer.Length;
context.Response.ContentType=“text/html”;
使用(var stream=context.Response.Body)
{
wait stream.WriteAsync(buffer,默认值,buffer.Length);
等待stream.FlushAsync();
}
等待这个。下一步(上下文);
}
}

经过两天的研究,我得到了答案:

类库是不够的。你需要一个Razor类库

或者您可以编辑您的.csproj:

//来自
//到
//来自
netcoreapp3.0
//到
netcoreapp3.0
真的

谢谢,经过两天的研究,我也来到了这里,问题得到了解决。