139 lines
4.1 KiB
C#
139 lines
4.1 KiB
C#
using System;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using xCommons.Attributes;
|
|
using xCommons.Configurations;
|
|
using xCommons.Extensions;
|
|
using xCommons.Providers;
|
|
using xExceptions.Constants;
|
|
|
|
namespace xCommons.Controllers {
|
|
/// <summary>
|
|
/// Base Controller
|
|
/// </summary>
|
|
[Route ("[controller]")]
|
|
[Produces ("application/json")]
|
|
public abstract partial class XBaseController : ControllerBase {
|
|
public ILogger Logger { get; }
|
|
public XAppConfiguration AppConfiguration { get; }
|
|
public XValidationProvider ValidationProvider { get; }
|
|
|
|
public XBaseController (
|
|
ILogger logger,
|
|
XAppConfiguration appConfiguration,
|
|
XValidationProvider validationProvider
|
|
) {
|
|
Logger = logger;
|
|
AppConfiguration = appConfiguration;
|
|
ValidationProvider = validationProvider;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check the Controller Up and Running
|
|
/// </summary>
|
|
/// <returns>string message</returns>
|
|
[HttpGet]
|
|
[Route ("Test/Hi")]
|
|
[AllowAnonymous]
|
|
public virtual IActionResult Hi () {
|
|
//
|
|
var controllerName = GetControllerName ();
|
|
var message = $"{controllerName} Controller is Up and running ...";
|
|
|
|
//
|
|
return Ok (message);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check Controller ByPass XPowered Filter
|
|
/// </summary>
|
|
/// <returns>string message</returns>
|
|
[HttpGet]
|
|
[AllowAnonymous]
|
|
[RequireXPowered (false)]
|
|
[Route ("Test/PassRequireXPowered")]
|
|
public virtual IActionResult PassRequireXPowered () {
|
|
//
|
|
var controllerName = GetControllerName ();
|
|
var message = $"{controllerName} Controller bypass RequiredXPowered and Up and running ...";
|
|
|
|
//
|
|
return Ok (message);
|
|
}
|
|
|
|
//
|
|
#region Non Actions ...
|
|
/// <summary>
|
|
/// Convert an Exception to Propper Error Result
|
|
/// </summary>
|
|
/// <param name="ex"></param>
|
|
/// <returns></returns>
|
|
[NonAction]
|
|
public ActionResult GetExceptionActionResult (Exception ex) {
|
|
//
|
|
var exception = GetExceptionResult (ex);
|
|
var error = ex.Message.ToXError ();
|
|
|
|
//
|
|
Logger.LogError ($"exception: {exception}, error: {error}");
|
|
|
|
//
|
|
try {
|
|
var xError = exception.Message.ToXError ();
|
|
var xException = (XException) xError.Id;
|
|
|
|
//
|
|
switch (xException) {
|
|
//
|
|
case XException.NotFound:
|
|
return NotFound (error);
|
|
|
|
//
|
|
case XException.NotAuthorized:
|
|
return Unauthorized ();
|
|
}
|
|
} catch { }
|
|
|
|
//
|
|
return BadRequest (error);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Return Structured Exception
|
|
/// </summary>
|
|
/// <param name="ex"></param>
|
|
/// <returns></returns>
|
|
[NonAction]
|
|
public Exception GetExceptionResult (Exception ex) {
|
|
//
|
|
// Log Exception Message ...
|
|
Logger.LogError (ex.Message);
|
|
|
|
//
|
|
// if Happens Exception is Know Error
|
|
// catch it and return it in BadRequest Container ...
|
|
var isEr = ex.Message.IsXError ();
|
|
|
|
//
|
|
if (isEr) {
|
|
return ex;
|
|
}
|
|
|
|
//
|
|
// if catched Exception Contains Unknown Error
|
|
// return an Unknown Error ...
|
|
return XException.Unknown.ToException ();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve ControllerName
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[NonAction]
|
|
public string GetControllerName () {
|
|
return this.ControllerContext.RouteData.Values["controller"].ToString ();
|
|
}
|
|
#endregion
|
|
}
|
|
} |