Class Status (2.17.0)

public sealed class Status : IMessage<Status>, IEquatable<Status>, IDeepCloneable<Status>, IBufferMessage, IMessage

The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details.

You can find out more about this error model and how to work with it in the API Design Guide.

Inheritance

object > Status

Namespace

Google.Rpc

Assembly

Google.Api.CommonProtos.dll

Constructors

Status()

public Status()

Status(Status)

public Status(Status other)
Parameter
Name Description
other Status

Fields

CodeFieldNumber

public const int CodeFieldNumber = 1

Field number for the "code" field.

Field Value
Type Description
int

DetailsFieldNumber

public const int DetailsFieldNumber = 3

Field number for the "details" field.

Field Value
Type Description
int

MessageFieldNumber

public const int MessageFieldNumber = 2

Field number for the "message" field.

Field Value
Type Description
int

Properties

Code

public int Code { get; set; }

The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].

Property Value
Type Description
int

Descriptor

public static MessageDescriptor Descriptor { get; }
Property Value
Type Description
MessageDescriptor

Details

public RepeatedField<Any> Details { get; }

A list of messages that carry the error details. There is a common set of message types for APIs to use.

Property Value
Type Description
RepeatedFieldAny

Message

public string Message { get; set; }

A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.

Property Value
Type Description
string

Parser

public static MessageParser<Status> Parser { get; }
Property Value
Type Description
MessageParserStatus

Methods

CalculateSize()

public int CalculateSize()
Returns
Type Description
int

Clone()

public Status Clone()
Returns
Type Description
Status

Equals(Status)

public bool Equals(Status other)
Parameter
Name Description
other Status
Returns
Type Description
bool

Equals(object)

public override bool Equals(object other)
Parameter
Name Description
other object
Returns
Type Description
bool
Overrides

GetDetail<T>()

public T GetDetail<T>() where T : class, IMessage<T>, new()

Retrieves the error details of type T from the Status message.

Returns
Type Description
T

The first error details of type T found, or null if not present.

Type Parameter
Name Description
T

The message type to decode from within the error details.

Remarks

GetHashCode()

public override int GetHashCode()
Returns
Type Description
int
Overrides

MergeFrom(CodedInputStream)

public void MergeFrom(CodedInputStream input)
Parameter
Name Description
input CodedInputStream

MergeFrom(Status)

public void MergeFrom(Status other)
Parameter
Name Description
other Status

ToString()

public override string ToString()
Returns
Type Description
string
Overrides

UnpackDetailMessages()

public IEnumerable<IMessage> UnpackDetailMessages()

Iterate over all the messages in the Details

Returns
Type Description
IEnumerableIMessage
Remarks

Iterate over the messages in the Details that are messages in the standard set of error types defined in the richer error model. Any other messages found in the Details are ignored and not returned.

foreach (var msg in status.UnpackDetailMessages())
 {
     switch (msg)
     {
         case ErrorInfo errorInfo:
             // Handle errorInfo ...
             break;

         // Other cases ...
     }
 }

UnpackDetailMessages(TypeRegistry)

public IEnumerable<IMessage> UnpackDetailMessages(TypeRegistry registry)

Iterate over all the messages in the Details that match types in the given TypeRegistry

Parameter
Name Description
registry TypeRegistry

The type registry to use to unpack detail messages.

Returns
Type Description
IEnumerableIMessage

A (possibly-empty) sequence of detail messages.

Remarks

Iterate over the messages in the Details that are messages in the given TypeRegistry. Any other messages found in the Details are ignored and not returned. This allows iterating over custom messages if you are not using the standard set of error types defined in the rich error model.

TypeRegistry myTypes = TypeRegistry.FromMessages(FooMessage.Descriptor, BarMessage.Descriptor);

 foreach (var msg in status.UnpackDetailMessages(myTypes))
 {
     switch (msg)
     {
         case FooMessage foo:
             // Handle foo ...
              break;

         // Other cases ...
     }
 }

WriteTo(CodedOutputStream)

public void WriteTo(CodedOutputStream output)
Parameter
Name Description
output CodedOutputStream