.net core 如何从控制器使用fileprovider为页面提供服务?

.net core 如何从控制器使用fileprovider为页面提供服务?,.net-core,asp.net-core-webapi,fileprovider,request-pipeline,.net Core,Asp.net Core Webapi,Fileprovider,Request Pipeline,我有一个Asp网络核心,虽然我有一些表示简单API调用的控制器,但我还想使用FileProvider来提供页面服务 如何将页面请求重定向到控制器(检查凭据)并提供服务?我还必须分支管道,以便能够提供简单的json 到目前为止,我的fileprovider服务于所有请求它的人。我如何从控制器使用它(在请求上添加额外的保护逻辑) 启动 public void Configure(IApplicationBuilder app) { app.MapWhen(x =>

我有一个
Asp网络核心
,虽然我有一些表示简单
API
调用的控制器,但我还想使用
FileProvider
来提供页面服务

如何将页面请求重定向到控制器(检查凭据)并提供服务?我还必须分支管道,以便能够提供简单的
json

到目前为止,我的fileprovider服务于所有请求它的人。我如何从控制器使用它(在请求上添加额外的保护逻辑)

启动

  public void Configure(IApplicationBuilder app) {

            app.MapWhen(x => x.Request.Path.Value.Contains("pages"), x => {
               PhysicalFileProvider provider = new PhysicalFileProvider([some path]);
               DefaultFilesOptions options = new DefaultFilesOptions() {
                  DefaultFileNames = new List<string> { "index.html" },
                  FileProvider = provider
               };

               x.UseDefaultFiles(options);
               x.UseStaticFiles(new StaticFileOptions {
                  RequestPath = "index.html",
                  FileProvider = provider
               });
               x.UseMvc();
            });
            app.UseMvc();
}
public void配置(IApplicationBuilder应用程序){
app.MapWhen(x=>x.Request.Path.Value.Contains(“页面”),x=>{
PhysicalFileProvider=新的PhysicalFileProvider([某些路径]);
DefaultFileOptions=newDefaultFileOptions(){
DefaultFileNames=新列表{“index.html”},
FileProvider=provider
};
x、 使用默认文件(选项);
x、 使用StaticFiles(新的StaticFileOptions{
RequestPath=“index.html”,
FileProvider=provider
});
x、 UseMvc();
});
app.UseMvc();
}
PageController

public class PageController:Controller {
        [HttpGet]
        [Route("/pages/index.html")]
        public async Task<File> ServeIndexAsync() {
            //logic to check if user has access

         }
        [HttpGet]
        [Route("/pages/data.html")]
        public async Task<File> ServeDataAsync()
        {
        }
}
公共类页面控制器:控制器{
[HttpGet]
[路由(“/pages/index.html”)]
公共异步任务ServeIndexAsync(){
//检查用户是否具有访问权限的逻辑
}
[HttpGet]
[路由(“/pages/data.html”)]
公共异步任务ServeDataAsync()
{
}
}
Api控制器

public class PageController:Controller {
        [HttpGet]
        [Route("/pages/index.html")]
        public async Task<File> ServeIndexAsync() {
            //logic to check if user has access

         }
        [HttpGet]
        [Route("/pages/data.html")]
        public async Task<File> ServeDataAsync()
        {
        }
}
这是一个普通的控制器,当有人请求非页面请求时,其逻辑将被使用:

public NormalController:Controller
{
   [HttpGet]
   [Route("/get-data")]
   public async Task<string> GetDataAsync()
   { 
      return "some data";
   }

}
公共控制器:控制器
{
[HttpGet]
[路由(“/get data”)]
公共异步任务GetDataAsync()
{ 
返回“一些数据”;
}
}

p.S我不知道
PageController
方法如果返回文件应该具有什么返回类型?

这在web应用程序教程和中有描述。如果您指的是静态文件,那么通常只需调用
app.UseStaticFiles()默认情况下,仅提供默认根文件夹(wwwroot)下的文件。这些文档还显示了如何返回外部文件我已经查看了您提供的教程,还有这个,但我仍然不明白如何从控制器提供文件?在这种情况下我需要文件提供商吗?是什么情况?你想做什么?为像
index.html这样的静态页面提供服务与从API控制器创建和返回文件(任何文件)不同。这两种方法都不同于编写SPA,SPA的HTML由Razor生成并调用API。因此,我有一个
angular
SPA应用程序,我想在允许用户访问应用程序页面之前检查用户声明。为此,我需要检查后端的请求。因此,如果用户请求页面
settings.html
从我的angular应用程序中,我想通过后端的
控制器
传递请求,看看他是否有权访问该页面。因此,真正的问题与此处发布的问题完全不同。这就是所谓的。在这种情况下,真正的问题是如何在ASP.NET核心SPA应用程序中使用身份验证,如中所述。您尝试过ASP.NET Core的angular模板吗?这在web应用教程和中有介绍。如果您指的是静态文件,那么通常只需调用
app.UseStaticFiles()默认情况下,仅提供默认根文件夹(wwwroot)下的文件。这些文档还显示了如何返回外部文件我已经查看了您提供的教程,还有这个,但我仍然不明白如何从控制器提供文件?在这种情况下我需要文件提供商吗?是什么情况?你想做什么?为像
index.html这样的静态页面提供服务与从API控制器创建和返回文件(任何文件)不同。这两种方法都不同于编写SPA,SPA的HTML由Razor生成并调用API。因此,我有一个
angular
SPA应用程序,我想在允许用户访问应用程序页面之前检查用户声明。为此,我需要检查后端的请求。因此,如果用户请求页面
settings.html
从我的angular应用程序中,我想通过后端的
控制器
传递请求,看看他是否有权访问该页面。因此,真正的问题与此处发布的问题完全不同。这就是所谓的。在这种情况下,真正的问题是如何在ASP.NET核心SPA应用程序中使用身份验证,如中所述。你试过ASP.NET Core的angular模板吗?