【发布时间】:2018-07-16 21:52:45
【问题描述】:
我正在使用Openidict。
我正在尝试使用自定义状态代码返回自定义消息,但我无法做到。我在startup.cs中的配置:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.Authority = this.Configuration["Authentication:OpenIddict:Authority"];
o.Audience = "MyApp"; //Also in Auhorization.cs controller.
o.RequireHttpsMetadata = !this.Environment.IsDevelopment();
o.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = context =>
{
context.Response.StatusCode = HttpStatusCodes.AuthenticationFailed;
context.Response.ContentType = "application/json";
var err = this.Environment.IsDevelopment() ? context.Exception.ToString() : "An error occurred processing your authentication.";
var result = JsonConvert.SerializeObject(new {err});
return context.Response.WriteAsync(result);
}
};
});
但问题是没有返回内容。 Chrome 开发者工具报告
(失败)
对于状态和
加载响应数据失败
响应。
我也试过了:
context.Response.WriteAsync(result).Wait();
return Task.CompletedTask;
但结果是一样的。
期望的行为:
我想返回自定义状态代码并显示出了什么问题。
【问题讨论】:
-
Do not post images of code or errors! 图片和屏幕截图可以很好地添加到帖子中,但请确保帖子在没有它们的情况下仍然清晰有用。如果您发布代码或错误消息的图像,请确保您还复制并粘贴或直接在帖子中输入实际代码/消息。
-
无法加载
vendor.js。你在Startup.cs文件中使用app.UseStaticFiles()吗?如果有,必须在app.UseAuthentication()之前注册。 -
OnAuthenticationFailed for JwtBearer 在 2.0 中无法再返回内容。它没有必要控制请求流。
-
@Rob 明白,我不确定文字是否足够。状态码失败对我来说真的很奇怪,虽然我发现返回的是实际代码,但是在 Angular 进程请求之后,代码被更改为失败。
-
@Brad 我正在使用
UseStaticFiles,它在UseAuthentication之前注册。它不是无法加载vendor,而是从vendor引发错误。
标签: asp.net-core asp.net-core-2.0 openiddict