Files
xCommons/Controllers/XBaseController.cs
T
2024-01-25 04:39:39 +03:30

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
}
}