如何通过Web Api控制器转发所有SPA页面请求?

时间:2019-09-11 13:01:28

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

我有一个angular application,我希望首先通过它的所有请求都通过API Controller,以便检查角色或授权。我不想更改我的所有{{1} },使其与urls相匹配:

我希望该服务器上的所有请求首先通过控制器:

路线示例

Controller

目前,我在localhost:4200/index localhost:4200/details localhost:4200/data/3 中的管道如下所示:

Startup

控制器

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseMvc(routes => {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa => {
                spa.Options.SourcePath = "WorkingApp";

                if (env.IsDevelopment()) {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
        }

如何更改using Serilog; public class AuthController : ControllerBase { [HttpGet("[action]")] public async Task<ActionResult<AuthenticationResult>> GetUsernameAndRolesAsync() { try { var result = new AuthenticationResult() { Username = User.Identity.Name, Roles = User.Claims.Where(x => x.Type == ClaimTypes.Role) .Select(x => x.Value) .ToList() }; Log.Information($"GetUsernameAndRolesAsync returned IsAuthenticated={User.Identity.IsAuthenticated} for username {result.Username}"); foreach (var role in result.Roles) { Log.Information($"GetUsernameAndRolesAsync returned role: {role} for username: {result.Username}"); } return result; } catch (Exception ex) { return new StatusCodeResult(500); } } } public class AuthenticationResult { public string Username { get; set; } public List<string> Roles { get; set; } } 模板和管道,以使所有请求无缝地通过控制器传递?

1 个答案:

答案 0 :(得分:2)

为此要求

  

我希望所有首先通过它的请求都通过API   控制器以便检查角色或授权

这不是推荐的方法,因为如果要检查用户访问资源的权限,则必须提供guard。使用Guard来检查用户的权限和授权。

.Net Core Web api具有Authorize属性,用于检查用户访问API资源的权限,通常使用实现JWT所需的SPA。令牌将存储在客户端,当用户请求API资源时,我们会在标头中发送带有令牌的请求,以使服务器知道谁在请求资源