fix
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
# Editor configuration, see https://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = tabs
|
||||
indent_size = 4
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.ts]
|
||||
quote_type = single
|
||||
|
||||
[*.md]
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
@@ -5,7 +5,6 @@ using DbContext;
|
||||
|
||||
public class RepositoryBase<TEntity> where TEntity : class
|
||||
{
|
||||
//TODO: Rename
|
||||
protected readonly AppDbContext _context;
|
||||
|
||||
protected RepositoryBase(
|
||||
@@ -52,7 +51,6 @@ public class RepositoryBase<TEntity> where TEntity : class
|
||||
|
||||
protected int AddBase(TEntity entity)
|
||||
{
|
||||
//_context.Add(entity);
|
||||
_context.Entry(entity).State = EntityState.Added;
|
||||
|
||||
var result = SaveChanges();
|
||||
@@ -75,7 +73,6 @@ public class RepositoryBase<TEntity> where TEntity : class
|
||||
|
||||
protected int UpdateBase(TEntity entity)
|
||||
{
|
||||
//_context.Attach(entity);
|
||||
_context.Entry(entity).State = EntityState.Modified;
|
||||
|
||||
var result = SaveChanges();
|
||||
|
||||
@@ -24,14 +24,13 @@ export class ErrorInterceptor implements HttpInterceptor {
|
||||
this.authenticationService.logout();
|
||||
location.reload();
|
||||
}
|
||||
let error = err.message || err.statusText;
|
||||
error = !err.error ? error : err.error.message || err.error.title;
|
||||
|
||||
let error = err.error || err.message || err.statusText;
|
||||
|
||||
if (!error) {
|
||||
console.log('not parsed error', err);
|
||||
}
|
||||
return throwError(error);
|
||||
//return throwError(err.error || err);
|
||||
return throwError(() => error);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
<div class="text-inside">
|
||||
<mat-form-field class="example-full-width" appearance="fill">
|
||||
<mat-label>Rate</mat-label>
|
||||
<input matInput [value]="currency.rate | number:'0.2-2'" formControlName="rate" currencyMask [options]="{ prefix: '', precision: 4, inputMode: 1 }" required>
|
||||
<input matInput [value]="currency.rate | number:'0.2-2'" formControlName="rate" currencyMask
|
||||
[options]="{ prefix: '', precision: 4, inputMode: 1 }" required>
|
||||
<mat-error *ngIf="addForm.controls?.['rate']?.hasError('required')">
|
||||
Please enter rate
|
||||
</mat-error>
|
||||
@@ -52,7 +53,8 @@
|
||||
<div class="text-inside">
|
||||
<mat-form-field class="example-full-width" appearance="fill">
|
||||
<mat-label>Quantity</mat-label>
|
||||
<input matInput [value]="currency.rate | number:'0.0-0'" formControlName="quantity" currencyMask [options]="{ prefix: '', precision: 0 }" required>
|
||||
<input matInput [value]="currency.rate | number:'0.0-0'" formControlName="quantity"
|
||||
currencyMask [options]="{ prefix: '', precision: 0 }" required>
|
||||
<mat-error *ngIf="addForm.controls?.['rate']?.hasError('required')">
|
||||
Please enter rate
|
||||
</mat-error>
|
||||
@@ -63,7 +65,8 @@
|
||||
<div class="text-inside">
|
||||
<mat-form-field class="example-full-width">
|
||||
<mat-label>Rate Date</mat-label>
|
||||
<input matInput [matDatepicker]="picker3" (focus)="picker3.open()" value={{currency.rateDate}} formControlName="rateDate" required>
|
||||
<input matInput [matDatepicker]="picker3" (focus)="picker3.open()"
|
||||
value={{currency.rateDate}} formControlName="rateDate" required>
|
||||
<mat-hint>DD/MM/YYYY</mat-hint>
|
||||
<mat-datepicker-toggle matSuffix [for]="picker3"></mat-datepicker-toggle>
|
||||
<mat-datepicker #picker3></mat-datepicker>
|
||||
@@ -85,8 +88,11 @@
|
||||
</div>
|
||||
<mat-dialog-actions class="mat-dialog-actions">
|
||||
<div class="mat-dialog-left">
|
||||
<div class="alert alert-danger mat-dialog-error" *ngIf="errorMessage">
|
||||
{{errorMessage}}
|
||||
<div class="alert alert-danger mat-dialog-error" *ngIf="error">
|
||||
<p *ngIf="error.title">{{error.title}}</p>
|
||||
<ul *ngIf="error.errors">
|
||||
<li *ngFor="let error of error.errors | keyvalue">{{error.value}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mat-dialog-right">
|
||||
|
||||
@@ -21,7 +21,7 @@ import { CurrencyModel } from '../../../model/currency.model';
|
||||
})
|
||||
export class SettingsRateCurrencyComponent {
|
||||
public addForm!: UntypedFormGroup;
|
||||
public errorMessage?: string;
|
||||
public error?: any;
|
||||
|
||||
constructor(
|
||||
private fb: UntypedFormBuilder,
|
||||
@@ -71,20 +71,26 @@ export class SettingsRateCurrencyComponent {
|
||||
}
|
||||
|
||||
onSubmitClick() {
|
||||
this.error = undefined;
|
||||
if (this.addForm.valid) {
|
||||
this.errorMessage = undefined;
|
||||
this.httpClient
|
||||
.put<CurrencyModel>(ApiRoutes.SettingsCurrency.replace(':id', this.addForm.value.id), this.addForm.value)
|
||||
.subscribe(response => {
|
||||
.subscribe({
|
||||
next: (response) => {
|
||||
this.httpClient
|
||||
.post<CurrencyModel[]>(ApiRoutes.SettingsCurrenciesRate.replace(':id', this.addForm.value.id), this.addForm.value)
|
||||
.subscribe(response => {
|
||||
.subscribe({
|
||||
next: (response) => {
|
||||
this.dialogRef.close({ refresh: true });
|
||||
}, error => {
|
||||
this.errorMessage = error.detail;
|
||||
},
|
||||
error: (error) => {
|
||||
this.error = error;
|
||||
},
|
||||
});
|
||||
}, error => {
|
||||
this.errorMessage = error.detail;
|
||||
},
|
||||
error: (error) => {
|
||||
this.error = error;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
namespace MyOffice.Web.Controllers;
|
||||
|
||||
using System.Security.Authentication;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Core.Extensions;
|
||||
using IdentityModel;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using MyOffice.Web.Infrastructure.Attributes;
|
||||
using MyOffice.Web.Models;
|
||||
|
||||
[DefaultFromBody]
|
||||
public class BaseApiController : ControllerBase
|
||||
{
|
||||
public Guid UserId
|
||||
|
||||
@@ -3,7 +3,6 @@ namespace MyOffice.Web.Controllers;
|
||||
using AutoMapper;
|
||||
using Core;
|
||||
using Core.Extensions;
|
||||
using Data.Models.Currencies;
|
||||
using Infrastructure.Attributes;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
@@ -12,8 +11,7 @@ using Services.Currency;
|
||||
using Services.Currency.Domain;
|
||||
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
[DefaultFromBody]
|
||||
public class CurrencyController : BaseApiController
|
||||
{
|
||||
private readonly CurrencyService _currencyService;
|
||||
@@ -31,7 +29,6 @@ public class CurrencyController : BaseApiController
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
[HttpGet("~/api/settings/currencies")]
|
||||
public ObjectResult Get()
|
||||
{
|
||||
var list = _currencyService.GetAllWithRates(UserId);
|
||||
@@ -39,8 +36,7 @@ public class CurrencyController : BaseApiController
|
||||
return OkResponse(_mapper.Map<List<CurrencyViewModel>>(list).OrderBy(x => x.Id));
|
||||
}
|
||||
|
||||
[HttpPost("~/api/settings/currencies")]
|
||||
public ObjectResult Post(CurrencyAddModel currency)
|
||||
public ObjectResult Add(CurrencyAddModel currency)
|
||||
{
|
||||
var exec = _currencyService.CurrencyAdd(UserId, new CurrencyDto
|
||||
{
|
||||
@@ -71,7 +67,6 @@ public class CurrencyController : BaseApiController
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPut("~/api/settings/currencies/{id}")]
|
||||
public ObjectResult Update(string id, CurrencyEditModel currency)
|
||||
{
|
||||
var exec = _currencyService.CurrencyUpdate(
|
||||
@@ -94,8 +89,7 @@ public class CurrencyController : BaseApiController
|
||||
}
|
||||
}
|
||||
|
||||
[HttpDelete("~/api/settings/currencies/{id}")]
|
||||
public ObjectResult Update([AsGuid] string id)
|
||||
public ObjectResult Delete([AsGuid] string id)
|
||||
{
|
||||
var exec = _currencyService.Remove(UserId, id.AsGuid());
|
||||
|
||||
@@ -113,8 +107,7 @@ public class CurrencyController : BaseApiController
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost("~/api/settings/currencies/{id}/rate")]
|
||||
public ObjectResult Add(string id, CurrencyRateModel currencyRate)
|
||||
public ObjectResult AddRate(string id, CurrencyRateModel currencyRate)
|
||||
{
|
||||
var exec = _currencyService.CurrencyRateAdd(UserId, id.AsGuid(), new CurrencyRateDto
|
||||
{
|
||||
|
||||
@@ -5,10 +5,10 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Models.Currency;
|
||||
using Services.Currency;
|
||||
using MyOffice.Web.Infrastructure.Attributes;
|
||||
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
[DefaultFromBody]
|
||||
public class GeneralController : BaseApiController
|
||||
{
|
||||
private readonly CurrencyService _currencyService;
|
||||
@@ -23,8 +23,7 @@ public class GeneralController : BaseApiController
|
||||
_mapper = mapper;
|
||||
}
|
||||
|
||||
[HttpGet("~/api/general/currencies")]
|
||||
public ObjectResult Get()
|
||||
public ObjectResult GetGlobalCurrencies()
|
||||
{
|
||||
var list = _currencyService.GetGlobalAll();
|
||||
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
namespace MyOffice.Web.Infrastructure.Attributes;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
|
||||
public sealed class DefaultFromBodyAttribute : Attribute
|
||||
{
|
||||
}
|
||||
|
||||
public class GlobalModelStateValidatorAttribute : ActionFilterAttribute
|
||||
{
|
||||
private readonly ProblemDetailsFactory _problemDetailsFactory;
|
||||
|
||||
public GlobalModelStateValidatorAttribute(ProblemDetailsFactory problemDetailsFactory)
|
||||
{
|
||||
_problemDetailsFactory = problemDetailsFactory;
|
||||
}
|
||||
|
||||
public override void OnActionExecuting(ActionExecutingContext context)
|
||||
{
|
||||
if (!context.ModelState.IsValid)
|
||||
{
|
||||
context.Result = new ObjectResult(_problemDetailsFactory.CreateValidationProblemDetails(context.HttpContext, context.ModelState))
|
||||
{
|
||||
StatusCode = StatusCodes.Status400BadRequest
|
||||
};
|
||||
}
|
||||
|
||||
base.OnActionExecuting(context);
|
||||
}
|
||||
}
|
||||
public class DefaultFromBodyBindingConvention : IActionModelConvention
|
||||
{
|
||||
public void Apply(ActionModel action)
|
||||
{
|
||||
if (action == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(action));
|
||||
}
|
||||
|
||||
if (action.Controller.Attributes.Any(a => a is DefaultFromBodyAttribute))
|
||||
{
|
||||
foreach (var parameter in action.Parameters)
|
||||
{
|
||||
var paramType = parameter.ParameterInfo.ParameterType;
|
||||
var isSimpleType = paramType.IsPrimitive
|
||||
|| paramType.IsEnum
|
||||
|| paramType == typeof(string)
|
||||
|| paramType == typeof(decimal);
|
||||
|
||||
if (!isSimpleType)
|
||||
{
|
||||
parameter.BindingInfo = parameter.BindingInfo ?? new BindingInfo();
|
||||
parameter.BindingInfo.BindingSource = BindingSource.Body;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
namespace MyOffice.Web.Infrastructure;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
public class CustomProblemDetailsFactory : ProblemDetailsFactory
|
||||
{
|
||||
private readonly ApiBehaviorOptions options;
|
||||
private readonly JsonOptions jsonOptions;
|
||||
|
||||
public CustomProblemDetailsFactory(IOptions<ApiBehaviorOptions> options, IOptions<JsonOptions> jsonOptions)
|
||||
{
|
||||
this.options = options?.Value ?? throw new ArgumentNullException(nameof(options));
|
||||
this.jsonOptions = jsonOptions?.Value ?? throw new ArgumentNullException(nameof(jsonOptions));
|
||||
}
|
||||
|
||||
public override ProblemDetails CreateProblemDetails(
|
||||
HttpContext httpContext,
|
||||
int? statusCode = null,
|
||||
string? title = null,
|
||||
string? type = null,
|
||||
string? detail = null,
|
||||
string? instance = null)
|
||||
{
|
||||
statusCode ??= 500;
|
||||
|
||||
var problemDetails = new ProblemDetails
|
||||
{
|
||||
Status = statusCode,
|
||||
Title = title,
|
||||
Type = type,
|
||||
Detail = detail,
|
||||
Instance = instance,
|
||||
};
|
||||
|
||||
ApplyProblemDetailsDefaults(httpContext, problemDetails, statusCode.Value);
|
||||
|
||||
return problemDetails;
|
||||
}
|
||||
|
||||
public override ValidationProblemDetails CreateValidationProblemDetails(
|
||||
HttpContext httpContext,
|
||||
ModelStateDictionary modelStateDictionary,
|
||||
int? statusCode = null,
|
||||
string? title = null,
|
||||
string? type = null,
|
||||
string? detail = null,
|
||||
string? instance = null)
|
||||
{
|
||||
if (modelStateDictionary == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(modelStateDictionary));
|
||||
}
|
||||
|
||||
statusCode ??= 400;
|
||||
|
||||
var errors = modelStateDictionary
|
||||
.Where(x => x.Value?.Errors.Any() == true)
|
||||
.ToDictionary(
|
||||
kvp => jsonOptions?.JsonSerializerOptions?.PropertyNamingPolicy?.ConvertName(kvp.Key) ?? kvp.Key,
|
||||
kvp => kvp.Value!.Errors.Select(x => x.ErrorMessage).ToArray()
|
||||
);
|
||||
|
||||
var problemDetails = new ValidationProblemDetails(errors)
|
||||
{
|
||||
Status = statusCode,
|
||||
Type = type,
|
||||
Detail = detail,
|
||||
Instance = instance,
|
||||
};
|
||||
|
||||
if (title != null)
|
||||
{
|
||||
// For validation problem details, don't overwrite the default title with null.
|
||||
problemDetails.Title = title;
|
||||
}
|
||||
|
||||
ApplyProblemDetailsDefaults(httpContext, problemDetails, statusCode.Value);
|
||||
|
||||
return problemDetails;
|
||||
}
|
||||
|
||||
private void ApplyProblemDetailsDefaults(HttpContext httpContext, ProblemDetails problemDetails, int statusCode)
|
||||
{
|
||||
problemDetails.Status ??= statusCode;
|
||||
|
||||
if (options.ClientErrorMapping.TryGetValue(statusCode, out var clientErrorData))
|
||||
{
|
||||
problemDetails.Title ??= clientErrorData.Title;
|
||||
problemDetails.Type ??= clientErrorData.Link;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
namespace MyOffice.Web;
|
||||
|
||||
public partial class Program
|
||||
{
|
||||
private static void MapRoutes(WebApplication app)
|
||||
{
|
||||
MapRoute(app, Routes.GlobalCurrencies, "General", "GetGlobalCurrencies", HttpMethod.Get);
|
||||
|
||||
// Settings Currency
|
||||
MapRoute(app, Routes.SettingsCurrencies, "Currency", "Get", HttpMethod.Get);
|
||||
MapRoute(app, Routes.SettingsCurrencies, "Currency", "Add", HttpMethod.Post);
|
||||
MapRoute(app, Routes.SettingsCurrency, "Currency", "Update", HttpMethod.Put);
|
||||
MapRoute(app, Routes.SettingsCurrency, "Currency", "Delete", HttpMethod.Delete);
|
||||
MapRoute(app, Routes.SettingsCurrencyRate, "Currency", "AddRate", HttpMethod.Post);
|
||||
}
|
||||
|
||||
private static void MapRoute(
|
||||
WebApplication app,
|
||||
string route,
|
||||
string controller,
|
||||
string action,
|
||||
params HttpMethod[] methods
|
||||
)
|
||||
{
|
||||
object? constraints = null;
|
||||
if (methods?.Any() == true)
|
||||
{
|
||||
constraints = new
|
||||
{
|
||||
httpMethod = new Microsoft.AspNetCore.Routing.Constraints.HttpMethodRouteConstraint(methods.Select(x => x.ToString()).ToArray())
|
||||
};
|
||||
}
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: $"{controller}_{action}",
|
||||
pattern: route,
|
||||
defaults: new
|
||||
{
|
||||
controller,
|
||||
action,
|
||||
},
|
||||
constraints: constraints
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Routes
|
||||
{
|
||||
public static readonly string GlobalCurrencies = "api/general/currencies";
|
||||
public static readonly string SettingsCurrencies = "api/settings/currencies";
|
||||
public static readonly string SettingsCurrency = "api/settings/currencies/{id}";
|
||||
public static readonly string SettingsCurrencyRate = "api/settings/currencies/{id}/rate";
|
||||
}
|
||||
+35
-5
@@ -43,8 +43,11 @@ using Services.Account;
|
||||
using Services.Item;
|
||||
using MyOffice.Services.Dashboard;
|
||||
using MyOffice.Services.Identity;
|
||||
using MyOffice.Services.Mapper;
|
||||
using MyOffice.Services.Account.Domain;
|
||||
using MyOffice.Web.Infrastructure.Attributes;
|
||||
using System.Text.Json;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
|
||||
//TODO: Data.Model only Repository and Service, response <-> mapper <-> web <-> mapper <-> service <-> repository
|
||||
//TODO: Project management
|
||||
@@ -73,7 +76,7 @@ using MyOffice.Services.Account.Domain;
|
||||
//TODO: report income
|
||||
//TODO: report outcome
|
||||
|
||||
public class Program
|
||||
public partial class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
@@ -88,6 +91,8 @@ public class Program
|
||||
|
||||
private static void AddServices(WebApplicationBuilder builder)
|
||||
{
|
||||
#region Loging
|
||||
|
||||
builder.Services.AddLogging(logging =>
|
||||
logging.AddSimpleConsole(options =>
|
||||
{
|
||||
@@ -99,6 +104,8 @@ public class Program
|
||||
//File Logger
|
||||
builder.Logging.AddFile(builder.Configuration.GetSection("Logging"));
|
||||
|
||||
#endregion Loging
|
||||
|
||||
builder.Services.Configure<LoggerFilterOptions>(options =>
|
||||
{
|
||||
//options.AddFilter("IdentityServer4", LogLevel.Warning); // or LogLevel.None to completely disable
|
||||
@@ -108,7 +115,8 @@ public class Program
|
||||
// shared configuration
|
||||
builder.Configuration.AddConfiguration(SharedConfiguration.CreateConfigurationContainer());
|
||||
|
||||
// Database
|
||||
#region Database
|
||||
|
||||
var databaseProvider = builder.Configuration["DatabaseProvider"];
|
||||
if (databaseProvider == null)
|
||||
throw new NullReferenceException($"Configuration DatabaseProvider {databaseProvider}");
|
||||
@@ -120,6 +128,8 @@ public class Program
|
||||
var connectionConfiguration = new ConnectionConfiguration(databaseProvider, connectionString);
|
||||
RepositoryInitializer.Initialize(builder.Services, connectionConfiguration);
|
||||
|
||||
#endregion Database
|
||||
|
||||
// Configurations
|
||||
builder.Services.Configure<ExternalProvidersConfig>(
|
||||
builder.Configuration.GetSection("ExternalProviders")
|
||||
@@ -131,7 +141,7 @@ public class Program
|
||||
|
||||
builder.Services.AddScoped<IContextProvider, ContextProvider>();
|
||||
|
||||
AddMapping(builder);
|
||||
AddAutoMapper(builder);
|
||||
|
||||
AddRepositories(builder);
|
||||
|
||||
@@ -145,6 +155,8 @@ public class Program
|
||||
options.JsonSerializerOptions.MaxDepth = 0;
|
||||
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
|
||||
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
|
||||
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
|
||||
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
|
||||
});
|
||||
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
@@ -152,6 +164,21 @@ public class Program
|
||||
//builder.Services.AddSwaggerGen();
|
||||
|
||||
builder.Services.AddCors();
|
||||
|
||||
builder.Services.AddControllersWithViews(options =>
|
||||
{
|
||||
options.Conventions.Add(new DefaultFromBodyBindingConvention());
|
||||
options.Filters.Add(typeof(GlobalModelStateValidatorAttribute));
|
||||
});
|
||||
|
||||
builder.Services.Configure<MvcOptions>(options =>
|
||||
{
|
||||
});
|
||||
|
||||
builder.Services.Configure<ApiBehaviorOptions>(x => {
|
||||
});
|
||||
|
||||
builder.Services.AddSingleton<ProblemDetailsFactory, CustomProblemDetailsFactory>();
|
||||
}
|
||||
|
||||
private static void InitializeGlobalSettings(WebApplicationBuilder builder)
|
||||
@@ -245,7 +272,7 @@ public class Program
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddMapping(WebApplicationBuilder builder)
|
||||
private static void AddAutoMapper(WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.AddAutoMapper(
|
||||
c =>
|
||||
@@ -423,8 +450,11 @@ public class Program
|
||||
|
||||
app.UseIdentityServer();
|
||||
//app.UseAuthentication();
|
||||
//app.UseRouting();
|
||||
app.UseAuthorization();
|
||||
|
||||
MapRoutes(app);
|
||||
|
||||
app.MapControllers();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user