/// <inheritdoc/> public override void WriteObject(object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) { if (graph == null) { throw Error.ArgumentNull("graph"); } if (messageWriter == null) { throw Error.ArgumentNull("messageWriter"); } ODataError oDataError = graph as ODataError; if (oDataError == null) { HttpError httpError = graph as HttpError; if (httpError == null) { string message = Error.Format(SRResources.ErrorTypeMustBeODataErrorOrHttpError, graph.GetType().FullName); throw new SerializationException(message); } else { oDataError = httpError.CreateODataError(); } } bool includeDebugInformation = oDataError.InnerError != null; messageWriter.WriteError(oDataError, includeDebugInformation); }
public void CreateODataError_CopiesMessageDetailToInnerError() { var error = new HttpError(); error["Message"] = "error"; error["MessageDetail"] = "messagedetail"; ODataError oDataError = error.CreateODataError(); Assert.Equal("error", oDataError.Message); Assert.Equal("messagedetail", oDataError.InnerError.Message); Assert.Null(oDataError.InnerError.InnerError); }
public void CreateODataError_CopiesInnerExceptionInformation() { Exception innerException = new ArgumentException("innerException"); Exception exception = new InvalidOperationException("exception", innerException); var error = new HttpError(exception, true); ODataError oDataError = error.CreateODataError(); Assert.Equal("An error has occurred.", oDataError.Message); Assert.Equal("exception", oDataError.InnerError.Message); Assert.Equal("System.InvalidOperationException", oDataError.InnerError.TypeName); Assert.Equal("innerException", oDataError.InnerError.InnerError.Message); Assert.Equal("System.ArgumentException", oDataError.InnerError.InnerError.TypeName); }
public void CreateODataError_CopiesModelStateErrorsToInnerError() { ModelStateDictionary dict = new ModelStateDictionary(); string errorMessage1 = "Object reference not set to an instance of an object."; string errorMessage2 = "Some ModelState error"; string parameter1Name = "parameter1"; string parameter2Name = "parameter2"; dict.AddModelError(parameter1Name, new InvalidOperationException(errorMessage1)); dict.AddModelError(parameter2Name, errorMessage2); var error = new HttpError(dict, includeErrorDetail: true); ODataError oDataError = error.CreateODataError(); Assert.Equal( parameter1Name + " : " + errorMessage1 + Environment.NewLine + parameter2Name + " : " + errorMessage2 + Environment.NewLine, oDataError.InnerError.Message); }
public void CreateODataError_CopiesAllErrorProperties() { var error = new HttpError(); error["Message"] = "error"; error["MessageLanguage"] = "language"; error["ErrorCode"] = "42"; error["ExceptionMessage"] = "exception"; error["ExceptionType"] = "System.ReallyBadException"; error["StackTrace"] = "stacktrace"; ODataError oDataError = error.CreateODataError(); Assert.Equal("error", oDataError.Message); Assert.Equal("42", oDataError.ErrorCode); Assert.Equal("exception", oDataError.InnerError.Message); Assert.Equal("System.ReallyBadException", oDataError.InnerError.TypeName); Assert.Equal("stacktrace", oDataError.InnerError.StackTrace); Assert.Null(oDataError.InnerError.InnerError); }
/// <summary> /// Create an ODataError from an HttpError. /// </summary> /// <param name="error">The error to use.</param> /// <returns>an ODataError.</returns> /// <remarks>This function uses types that are AspNet-specific.</remarks> internal static ODataError CreateODataError(object error) { HttpError httpError = error as HttpError; return(httpError.CreateODataError()); }