【发布时间】:2017-06-23 19:16:59
【问题描述】:
我的控制器中有一个身份验证过滤器
[ArcGISAuthentication]
我已经定义了如下过滤器
public class ArcGISAuthenticationAttribute : Attribute, IAuthenticationFilter
{
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
return Task.Run(async () =>
{
var queryParameters = HttpUtility.ParseQueryString(context.Request.RequestUri.Query);
var token = queryParameters["token"];
if (!string.IsNullOrWhiteSpace(token))
{
var userInfo = await CommunityManager.GetUserInfoAsync(token);
context.Principal = new ArcGISUserPrincipal(userInfo, token);
context.Request.SetUserPrincipal(context.Principal);
}
else{
//What shoudld I do here to send a json response
}
});
}
public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
return Task.Run(() => { });
}
public ArcGISAuthenticationAttribute()
{
}
}
问题是我想在身份验证失败时发送一个 json 响应。就像上面 AuthenticateAsync 中的 else 语句一样。
我该怎么做?
【问题讨论】:
-
创建自定义错误结果并将其设置为
context.Error属性。在结果中,您可以将响应消息设置为 JSON 或让内容协商器根据请求标头确定要返回的媒体类型
标签: c# asp.net asp.net-web-api owin http-token-authentication