gpt4 book ai didi

c# - 身份验证过滤器 : How to do a HTTP 401 with message

转载 作者:太空狗 更新时间:2023-10-29 22:15:51 25 4
gpt4 key购买 nike

我关注了http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/做一个自定义身份验证过滤器。

一切正常,但我无法让服务器对 401 说任何话。它正确地给出了 www-authenicate header 和状态代码 401,但没有内容/正文。

我尝试使用来自 http://www.asp.net/web-api/overview/security/authentication-filtersAuthenticationFailureResult但没有帮助。我将 AuthenticateAsync 转换为 async 并忽略了 await 警告。

这是我目前的解决方法,评论中的代码是我希望我能做的,主要是让它使用任何格式化程序

//request.CreateResponse(HttpStatusCode.Unauthorized, new { Error = true, Message = "Token is invalid" });
HttpContext.Current.Response.ContentType = "application/json";
HttpContext.Current.Response.Write("{ \"Error\" = true, \"Message\" = \"Token is invalid\" }");
context.ErrorResult = new UnauthorizedResult(new AuthenticationHeaderValue[0], request);

最佳答案

有两种选择:快速但粗暴,更长但更优雅

一个。直接修改HttpResponse:

HttpContext.Current.Response.StatusCode = 401;
HttpContext.Current.Response.Write("some content");

B.实现 IHttpActionResult 并在该类中设置 HttpResponseMessageContent 属性:

public class AuthenticationFailureResult : IHttpActionResult
{
public AuthenticationFailureResult(object jsonContent, HttpRequestMessage request)
{
JsonContent = jsonContent;
Request = request;
}

public HttpRequestMessage Request { get; private set; }

public Object JsonContent { get; private set; }

public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Execute());
}

private HttpResponseMessage Execute()
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
response.RequestMessage = Request;
response.Content = new ObjectContent(JsonContent.GetType(), JsonContent, new JsonMediaTypeFormatter());
return response;
}
}

然后你就可以像这样使用它了:

context.ErrorResult = new AuthenticationFailureResult(new { Error = true, Message = "Token is invalid" }, request);

注意:如果您想为 JsonContent 使用匿名类型,请确保 AuthenticationFailureResult 在同一个库中实现。

关于c# - 身份验证过滤器 : How to do a HTTP 401 with message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com