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 codeNamespace = exceptionWithErrorCode.Code.Split(':')[0];
var localizationResourceType = _localizationOptions.CodeNamespaceMappings.GetOrDefault(codeNamespace); var localizationResourceType = _localizationOptions.ErrorCodeNamespaceMappings.GetOrDefault(codeNamespace);
if (localizationResourceType == null) if (localizationResourceType == null)
{ {
return; return;

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

@ -1,19 +1,39 @@
using System; using System;
using System.Collections.Generic;
using System.Net; using System.Net;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.ExceptionHandling;
using Volo.Abp.Validation; using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling
{ {
public class DefaultHttpExceptionStatusCodeFinder : IHttpExceptionStatusCodeFinder, ITransientDependency 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) public virtual HttpStatusCode GetStatusCode(HttpContext httpContext, Exception exception)
{ {
//TODO: If the exception has error code than we can determine the exception from it! //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) if (exception is AbpAuthorizationException)
{ {
return httpContext.User.Identity.IsAuthenticated 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 class ExceptionLocalizationOptions
{ {
public Dictionary<string, Type> CodeNamespaceMappings { get; } public Dictionary<string, Type> ErrorCodeNamespaceMappings { get; }
public ExceptionLocalizationOptions() 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