// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddCors(); services.AddDataServices(Configuration); services.AddProfiles(typeof(Startup)); services.AddControllers(); services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_3_0) .AddMvcOptions(options => { // options.EnableEndpointRouting = false; options.Filters.Add(new HttpResponseExceptionFilter()); //options.Conventions.Add(new RouteTokenTransformerConvention(new SnakeCaseParameterTransformer())); }) .ConfigureApiBehaviorOptions(options => { options.InvalidModelStateResponseFactory = context => { HttpResponseError response = new HttpResponseError(status: HttpStatusCode.BadRequest, modelState: context.ModelState); return(new BadRequestObjectResult(response)); }; }) .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() }; }); }
public async Task Invoke(HttpContext context) { HttpResponseError response = null; try { await _next.Invoke(context); response = new HttpResponseError(status: (HttpStatusCode)context.Response.StatusCode); } catch (HttpResponseException ex) { response = new HttpResponseError(status: ex.StatusCode, message: ex.Message); if (_environment.IsDevelopment()) { response.Error = ex.Error; response.Trace = ex.StackTrace; } Console.WriteLine($"HttpResponseException endpoint {context.Request.Method}:{context.Request.Path.Value} {response.Error} {response.Trace}"); } catch (Exception ex) { response = new HttpResponseError(status: HttpStatusCode.InternalServerError, message: ex.Message); if (_environment.IsDevelopment()) { response.Trace = ex.StackTrace; } Console.WriteLine($"Exception endpoint {context.Request.Method}:{context.Request.Path} {response.Error} {response.Trace}"); } finally { if (!context.Response.HasStarted && response != null && response.StatusCode != HttpStatusCode.NoContent) { context.Response.ContentType = "application/json"; context.Response.StatusCode = response.StatusCode.GetValue(); string jsonResponse = JsonConvert.SerializeObject(response, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() } }); await context.Response.WriteAsync(jsonResponse); } } }