kreta/Kreta.WebApi/Naplo/Kreta.Naplo.WebApi/App_Start/WebApiConfig.cs
2024-03-13 00:33:46 +01:00

54 lines
1.9 KiB
C#

using System.Web.Http;
using Kreta.Core.JsonConverter;
using Kreta.Core.ModelBinder;
using Kreta.Naplo.Configuration;
using Kreta.Naplo.WebApi.FilterAttributes;
using Kreta.Web.Logging.Interceptors;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Kreta.Naplo.WebApi
{
/// <summary>
/// Web Api configuration class
/// </summary>
public static class WebApiConfig
{
/// <summary>
/// Web Api configuration entry
/// </summary>
/// <param name="config">HttpConfiguration for configuring web Api</param>
public static void Register(HttpConfiguration config)
{
var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.None
};
formatter.SerializerSettings.Converters.Add(new StringTrimConverter());
formatter.SerializerSettings.Converters.Add(new StringEnumConverter());
config.Filters.Add(new DefaultExceptionFilterAttribute());
config.Filters.Add(new ApiKeyAuthorizationAttribute());
config.Filters.Add(new IdpAuthorizeAttribute());
config.MapHttpAttributeRoutes();
config.MessageHandlers.Add(new ApiLoggingHandler());
var corsConfiguration = CorsConfiguration.Instance;
if (corsConfiguration.IsEnabled)
{
var cors = new WildcardOriginCorsPolicy(corsConfiguration.Urls, corsConfiguration.Headers, corsConfiguration.Methods)
{ SupportsCredentials = corsConfiguration.SupportsCredentials };
config.EnableCors(cors);
}
config.BindParameter(typeof(string), new StringTrimModelBinder());
}
}
}