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));
        }