MVC项目未正确映射API

时间:2018-08-07 03:18:34

标签: visual-studio-2017 asp.net-core-mvc openiddict

我有一个运行良好的项目,但是我已更新到最新的OpenIddict,现在该应用程序无法正确映射/ api / controller调用,我不知所措。 Startup.cs中的原始代码为:

[Route("api/curricula")]

然后装饰每个控制器:

    [Authorize]
    [HttpGet("{id:int}"), Produces("application/json")]
    public IActionResult Get(int id)

然后装饰了方法:

        app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), branch =>
        {
            // Note: the OpenIddict validation handler is only compatible with the
            // default token format or with reference tokens and cannot be used with
            // JWT tokens. For JWT tokens, use the Microsoft JWT bearer handler.
            // branch.UseOpenIddictValidation();

            // If you prefer using JWT, don't forget to disable the automatic
            // JWT -> WS-Federation claims mapping used by the JWT middleware:
            //
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
            //
            branch.UseJwtBearerAuthentication(new JwtBearerOptions
            {
                Authority = "http://localhost:53244/",
                Audience = "resource_server",
                RequireHttpsMetadata = false,
                TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = OpenIdConnectConstants.Claims.Subject,
                    RoleClaimType = OpenIdConnectConstants.Claims.Role
                }
            });

因此/ api / curricula / 1将返回ID为1的课程。

但是现在,按照OpenIddict RC2的指南,我有以下代码:

{{1}}

但是现在对api的调用无法到达控制器。

我用原始代码替换了新代码,但仍然无法正常工作。有人可以指出我正确的方向吗?

我还应该提到/ connect / token确实在AuthorizationController中达到了正确的方法并且成功了

此外,有人能推荐一本好书吗,例如OpenIddict的傻瓜书,还是一本记录AspNetCore中DI原理和实现的书?我能找到的所有文档似乎都假设您已经了解了所有这些,但我显然不是。在这种情况下,独自工作是一个严重的局限。

在此先感谢您的帮助。

其他信息 我有一个CurriculaController的GET控制器动作,该动作用[Authorize]属性装饰。如果我使用邮递员发送到/ api / curricula / 1,则返回401(未经授权)的状态,这与我期望的一样。但是,如果删除[Authorize]装饰或将其替换为[AllowAnonymous],它将生成状态500(内部服务器错误)。是什么原因造成的?返回401的事实似乎表明路由工作正常,但在允许匿名请求时失败。

0 个答案:

没有答案