Web API - ProtoBufFormatter - return 具有自定义授权属性的可序列化 401
Web API - ProtoBufFormatter - return serializable 401 with custom Authorize attribute
我们的问题如下:我们在 Web API.
中使用 ProtoBufFormatter
config.Formatters.Add(new ProtoBufFormatter());
还使用我们的自定义 Authorize 属性。问题是当我们的 Web API 是 returning 401 时。这导致 Protobuf 抛出异常,因为它无法序列化响应,因此它抛出以下异常:
No serializer defined for type: System.Object
当我注释掉时:
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
// base.HandleUnauthorizedRequest(actionContext);
}
服务器停止抛出异常,因为这会阻止它发送 401 响应。
但我不确定如何最好地处理这个问题。
然后我是否应该在我的控制器操作中 return 包含该用户的 protobuf 可序列化响应是未经授权的?
通过在响应中返回我们的可序列化内容来解决,如下所示:
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized,
new ApiResponse(false, ApiErrorMessages.Unauthorized, ErrorType.Unauthorized));
}
我们的问题如下:我们在 Web API.
中使用 ProtoBufFormatterconfig.Formatters.Add(new ProtoBufFormatter());
还使用我们的自定义 Authorize 属性。问题是当我们的 Web API 是 returning 401 时。这导致 Protobuf 抛出异常,因为它无法序列化响应,因此它抛出以下异常:
No serializer defined for type: System.Object
当我注释掉时:
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
// base.HandleUnauthorizedRequest(actionContext);
}
服务器停止抛出异常,因为这会阻止它发送 401 响应。
但我不确定如何最好地处理这个问题。
然后我是否应该在我的控制器操作中 return 包含该用户的 protobuf 可序列化响应是未经授权的?
通过在响应中返回我们的可序列化内容来解决,如下所示:
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized,
new ApiResponse(false, ApiErrorMessages.Unauthorized, ErrorType.Unauthorized));
}