using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Diagnostics; using System.IO; using WebApi.Attributes; namespace WebApi.Controllers { [ExceptionHandling] public class CoreController : Controller { [AllowAnonymous] [HttpGet] [Route("/")] public IDictionary<string, object> ApiInfo() { var info = new Dictionary<string, object>(); var assembly = GetType().Assembly; var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); info["name"] = "ApiName"; info["description"] = "Api description"; info["version"] = fileVersionInfo.ProductVersion; info["date"] = new FileInfo(fileVersionInfo.FileName).CreationTimeUtc; return info; } } } //ExceptionHandling attribute using Domain.Models.Log; using Domain.Ports.Drivers; using Domain.Resolving; using Microsoft.ApplicationInsights.AspNetCore.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.ModelBinding; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Net; using System.Security.Authentication; namespace WebApi.Attributes { public class ExceptionHandlingAttribute : ExceptionFilterAttribute { public override void OnException(ExceptionContext context) { var storeLogMessages = AdapterResolver.Resolve<IStoreLogMessages>(); storeLogMessages.Store(LogLevel.Error, $"{context.HttpContext.Request.Method} {context.HttpContext.Request.GetUri()}", context.Exception); ApiError apiError; if (context.Exception is AuthenticationException) { apiError = new ApiError("Unauthorized Access"); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized; } else { #if !DEBUG var msg = "An unhandled error occurred."; string stack = null; #else var msg = context.Exception.GetBaseException().Message; string stack = context.Exception.StackTrace; #endif apiError = new ApiError(msg) { Detail = stack }; context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; } context.Result = new JsonResult(apiError); base.OnException(context); } } public class ApiException : Exception { public int StatusCode { get; set; } public IList<ValidationResult> Results { get; set; } public ApiException(string message, int statusCode = 500, IList<ValidationResult> results = null) : base(message) { StatusCode = statusCode; Results = results; } public ApiException(Exception ex, int statusCode = 500) : base(ex.Message) { StatusCode = statusCode; } } public class ApiError { public string Message { get; set; } public bool IsError { get; set; } public string Detail { get; set; } public IList<ValidationResult> Results { get; set; } public ApiError(string message) { Message = message; IsError = true; } public ApiError(ModelStateDictionary modelState) { IsError = true; if (modelState != null && modelState.Any(m => m.Value.Errors.Count > 0)) { Message = "Please correct the specified Results and try again."; //Results = modelState.SelectMany(m => m.Value.Results).ToDictionary(m => m.Key, m=> m.ErrorMessage); //Results = modelState.SelectMany(m => m.Value.Results.Select( me => new KeyValuePair<string,string>( m.Key,me.ErrorMessage) )); //Results = modelState.SelectMany(m => m.Value.Results.Select(me => new ModelError { FieldName = m.Key, ErrorMessage = me.ErrorMessage })); } } } }
156600cookie-check.Net Core WebApi Version Info call