我有一个运行良好的项目,但是我已更新到最新的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的事实似乎表明路由工作正常,但在允许匿名请求时失败。