1

我有一个Asp Net Core ,虽然我有一些代表简单API调用的控制器,但我也想用FileProvider's 来服务页面。

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

到目前为止,我的文件提供程序已提供给每个请求它的人。我如何从控制器使用它(在请求中添加额外的保护逻辑)?

启动

  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 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()
        {
        }
}

API 控制器

这是一个普通控制器,只要有人请求非页面请求,就会使用其逻辑:

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

}

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

4

0 回答 0