當我的 API 中的授權失敗時,我必須顯示一個自定義(json)回應正文。默認情況下,我有此訊息:未經授權。但我想回傳一個包含自定義代碼錯誤、訊息和其他一些細節的 json。這是我所做的一個例子。
o.Events = new JwtBearerEvents
{
OnChallenge = async (context) =>
{
if (!context.Request.Headers.ContainsKey("Authorization"))
{
context.Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "The authorization parameter is not given or the token passed is empty";
}
},
OnAuthenticationFailed = async (context) =>
{
await context.HttpContext.Response.WriteAsync("ramses");
context.Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "The token is invalid or has expired";
},
};
我嘗試使用 HttpContext.Response 的 WriteAsync 方法,但我定義的訊息沒有出現,只有原因短語正確顯示。
這是我的 API 中結果的影像。

我在 jwtBearer 配置的 startup.cs 中指定此代碼
uj5u.com熱心網友回復:
我已經在我的代碼中使用了它并且效果很好
.AddJwtBearer(o => {
o.RequireHttpsMetadata = false;
o.SaveToken = false;
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents {
OnAuthenticationFailed = c => {
c.NoResult();
c.Response.StatusCode = 500;
c.Response.ContentType = "text/plain";
return c.Response.WriteAsync(c.Exception.ToString());
},
OnChallenge = context => {
context.HandleResponse();
context.Response.StatusCode = 401;
context.Response.ContentType = "application/json";
var result = JsonConvert.SerializeObject(new {
status = "un-authorized",
message = "un-authorized"
});
return context.Response.WriteAsync(result);
},
OnForbidden = context => {
context.Response.StatusCode = 403;
context.Response.ContentType = "application/json";
var result = JsonConvert.SerializeObject(new {
status = "un-authorized",
message = "un-authorized"
});
return context.Response.WriteAsync(result);
}
};
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/422833.html
標籤:
下一篇:如何向api發出請求
