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 { /// /// Base Controller /// [Route ("[controller]")] [Produces ("application/json")] public abstract partial class XBaseController : ControllerBase { public ILogger Logger { get; } public XAppConfiguration AppConfiguration { get; } public XValidationProvider ValidationProvider { get; } protected XBaseController ( ILogger logger, XAppConfiguration appConfiguration, XValidationProvider validationProvider ) { Logger = logger; AppConfiguration = appConfiguration; ValidationProvider = validationProvider; } /// /// Check the Controller Up and Running /// /// string message [HttpGet] [Route ("Test/Hi")] [AllowAnonymous] public virtual IActionResult Hi () { // var controllerName = GetControllerName (); var message = $"{controllerName} Controller is Up and running ..."; // return Ok (message); } /// /// Check Controller ByPass XPowered Filter /// /// string message [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 ... /// /// Convert an Exception to Propper Error Result /// /// /// [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); } /// /// Return Structured Exception /// /// /// [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 (); } /// /// Retrieve ControllerName /// /// [NonAction] public string GetControllerName () { return this.ControllerContext.RouteData.Values["controller"].ToString (); } #endregion } }