Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        /// <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());
        }