示例#1
0
        public override Task WriteToStreamAsync(Type type,
                                                object value,
                                                Stream writeStream,
                                                HttpContent content,
                                                TransportContext transportContext,
                                                CancellationToken cancellationToken)
        {
            var httpError = value as HttpError;

            if (httpError == null)
            {
                throw new ArgumentException("value is not HttpError instance");
            }

            var problemJsonResponse = new ProblemJsonModel
            {
                TypeUri   = "about:blank",
                Detail    = httpError.ExceptionMessage,
                Instance  = string.Format("urn:ietf:rfc:draft-nottingham-http-problem-06:x-exception:{0}", httpError.ExceptionType),
                DebugInfo = httpError.StackTrace,
                Title     = httpError.Message
            };

            return(base.WriteToStreamAsync(typeof(ProblemJsonModel), problemJsonResponse, writeStream, content, transportContext, cancellationToken));
        }
示例#2
0
        private static async Task WriteResponse(IOwinResponse owinResponse, ProblemJsonModel problemJsonResponse)
        {
            var message = JsonConvert.SerializeObject(problemJsonResponse);

            var bytes = Encoding.UTF8.GetBytes(message);

            owinResponse.Headers.Add("Content-type", new[] { ProblemJsonContentType, "charset=utf-8" });

            await owinResponse.Body.WriteAsync(bytes, 0, bytes.Length);
        }
示例#3
0
        private ProblemJsonModel CreateResponse(HttpResponseException exception)
        {
            var problemJsonResponse = new ProblemJsonModel
            {
                TypeUri  = "about:blank",
                Status   = (int)exception.Response.StatusCode,
                Instance = string.Format("urn:ietf:rfc:draft-nottingham-http-problem-06:x-exception:{0}", exception.GetType().FullName),
            };

            if (_developerMode)
            {
                problemJsonResponse.Detail    = exception.Message;
                problemJsonResponse.DebugInfo = exception.StackTrace;
                problemJsonResponse.Title     = exception.Message;
            }
            return(problemJsonResponse);
        }