Browse Source

Created and implemented ExceptionHttpStatusCodeOptions

pull/279/head
Halil İbrahim Kalkan 8 years ago
parent
commit
19eb291cef
  1. 2
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs
  2. 20
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs
  3. 20
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionHttpStatusCodeOptions.cs
  4. 8
      src/Volo.Abp.Localization/Volo/Abp/Localization/ExceptionHandling/ExceptionLocalizationOptions.cs

2
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs

@ -111,7 +111,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling
var codeNamespace = exceptionWithErrorCode.Code.Split(':')[0];
var localizationResourceType = _localizationOptions.CodeNamespaceMappings.GetOrDefault(codeNamespace);
var localizationResourceType = _localizationOptions.ErrorCodeNamespaceMappings.GetOrDefault(codeNamespace);
if (localizationResourceType == null)
{
return;

20
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs

@ -1,19 +1,39 @@
using System;
using System.Collections.Generic;
using System.Net;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities;
using Volo.Abp.ExceptionHandling;
using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling
{
public class DefaultHttpExceptionStatusCodeFinder : IHttpExceptionStatusCodeFinder, ITransientDependency
{
protected ExceptionHttpStatusCodeOptions Options { get; }
public DefaultHttpExceptionStatusCodeFinder(
IOptions<ExceptionHttpStatusCodeOptions> options)
{
Options = options.Value;
}
public virtual HttpStatusCode GetStatusCode(HttpContext httpContext, Exception exception)
{
//TODO: If the exception has error code than we can determine the exception from it!
if (exception is IHasErrorCode exceptionWithErrorCode &&
!exceptionWithErrorCode.Code.IsNullOrWhiteSpace())
{
if (Options.ErrorCodeToHttpStatusCodeMappings.TryGetValue(exceptionWithErrorCode.Code, out var status))
{
return status;
}
}
if (exception is AbpAuthorizationException)
{
return httpContext.User.Identity.IsAuthenticated

20
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/ExceptionHttpStatusCodeOptions.cs

@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Net;
namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling
{
public class ExceptionHttpStatusCodeOptions
{
public IDictionary<string, HttpStatusCode> ErrorCodeToHttpStatusCodeMappings { get; }
public ExceptionHttpStatusCodeOptions()
{
ErrorCodeToHttpStatusCodeMappings = new Dictionary<string, HttpStatusCode>();
}
public void Map(string errorCode, HttpStatusCode httpStatusCode)
{
ErrorCodeToHttpStatusCodeMappings[errorCode] = httpStatusCode;
}
}
}

8
src/Volo.Abp.Localization/Volo/Abp/Localization/ExceptionHandling/ExceptionLocalizationOptions.cs

@ -5,16 +5,16 @@ namespace Volo.Abp.Localization.ExceptionHandling
{
public class ExceptionLocalizationOptions
{
public Dictionary<string, Type> CodeNamespaceMappings { get; }
public Dictionary<string, Type> ErrorCodeNamespaceMappings { get; }
public ExceptionLocalizationOptions()
{
CodeNamespaceMappings = new Dictionary<string, Type>();
ErrorCodeNamespaceMappings = new Dictionary<string, Type>();
}
public void MapCodeNamespace(string codeNamespace, Type type)
public void MapCodeNamespace(string errorCodeNamespace, Type type)
{
CodeNamespaceMappings[codeNamespace] = type;
ErrorCodeNamespaceMappings[errorCodeNamespace] = type;
}
}
}

Loading…
Cancel
Save