public async Task <IActionResult> ValuteCurs([FromRoute] ValuteCursInput input) { if (this._options.Radius < 0) { // 0 можно. (0,0) же попадёт в этот радиус. return(this.Ok(new SvcOutput { Result = null, Message = $"Ошибка: В настройках указан отрицательный радиус: {this._options.Radius}", })); } if (this._options.ValuteCode?.Length > 0 != true) { return(this.Ok(new SvcOutput { Result = null, Message = $"Ошибка: В настройках не указан код валюты: {this._options.ValuteCode}", })); } Double x1 = 0d; Double y1 = 0d; Double x2 = input.X ?? 0; // проверено по атрибуту [Required] через [ApiController] Double y2 = input.X ?? 0; // проверено по атрибуту [Required] через [ApiController] var distance = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2)); if (distance > this._options.Radius) { return(this.Ok(new SvcOutput { Result = null, Message = $"Ошибка: Точка не попадает в заданный радиус: {this._options.Radius}", })); } DateTime date; // По идее это можно вынести куда-нибудь. // Но не думаю, что стоит городить отдельный файл ради преобразования входного объекта в параметры метода. if (input.X > 0 && input.Y > 0) { // Сегодня. date = DateTime.Today; } else if (input.X > 0 && input.Y < 0) { // Завтра. date = DateTime.Today.AddDays(1); } else if (input.X < 0 && input.Y < 0) { // Позавчера. date = DateTime.Today.AddDays(-2); } else { // (input.X < 0 && input.Y > 0) // Вчера. date = DateTime.Today.AddDays(-1); } // Тут могут выскочить исключения т.к. всё не предусмотришь, да и сомнительно, что надо. // Они обработаются обработчиком, настроенным в Startup-е. // В окружении Development выдача ответа иная. ValuteCursOnDate[] resultArr = await this._service.GetCursOnDateAsync( date : date ); if (resultArr?.Any() != true) { return(this.Ok(new SvcOutput { Result = null, Message = "По указанным данным курс не сформирован", })); } ValuteCursOnDate result = resultArr .FirstOrDefault(x => String.Equals(x.VchCode.Trim(), this._options.ValuteCode.Trim(), StringComparison.OrdinalIgnoreCase)); if (result == null) { return(this.Ok(new SvcOutput { Result = null, Message = $"Курс валюты {this._options.ValuteCode} не найден", })); } // Штучка, куда удобно ставить точку. { } return(this.Ok(new SvcOutput { Result = new { Nominal = result.Vnom, Curs = result.Vcurs, }, Message = null, })); }
public Task <IActionResult> ValuteCurs2([FromQuery] ValuteCursInput input) => this.ValuteCurs(input);