проверка наличия у параметра данных в C# Web API - PullRequest
0 голосов
/ 08 января 2020

Как установить вложенный запрос, проверив параметр, если данные существуют. На основании проекта, над которым я работаю, будет выдан оператор возврата с другим кодом ошибки «400»

Если отсутствует строка chart_type, она выдаст ошибку «Недопустимый тип диаграммы для доступа к данным». Если строка kpi_name отсутствует, она выдаст ошибку «Неверное имя kpi для доступа к данным». Если строка entity_name отсутствует, она выдаст ошибку «Неверное имя объекта для доступа к данным».

Если данные не найдены, будет возвращено сообщение «Данные не найдены для запрошенных параметров». Если требуемый параметр отсутствует, он вернет ошибку «Необходимые параметры отсутствуют для доступа к данным».

Наконец, если пользователь не авторизован для доступа к API, он вернет ошибку 401 «Этот запрос не авторизован». "

[HttpGet]
public HttpResponseMessage gethistogram(string entity_name, string kpi_name, string chart_type, int unix_start, int unix_end, string language)
{

   var result = _definitionRepository.histogram(entity_name,kpi_name,chart_type,unix_start,unix_end,language);

   if (chart_type == null)
   {
      return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid chart Type to access data");
   }

   if (kpi_name == null)
   {
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid KPI name to access data");
   }

   if (entity_name == null)
   {
      return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid Entity name to access data");
   }

   if (kpi_name == null && chart_type == null && entity_name == null)
   {
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Required parameters missing to access data");
   }

   return Request.CreateResponse(HttpStatusCode.OK, result);
}

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Я не уверен, что именно вы хотите, но вы можете попробовать следующее для проверки перед обработкой вашего метода.

Сначала объявите свой атрибут YourFilter, как показано ниже,

public class YourFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var yourParams = context.ActionArguments;
        //do your validation, control
    }
}

Тогда вы можете использовать этот атрибут как,

[YourFilter] //=>HERE
[HttpGet]
public HttpResponseMessage gethistogram(string entity_name, string kpi_name, string chart_type, int unix_start, int unix_end, string language)
{
...
0 голосов
/ 08 января 2020

вы запускаете _definitionRepository.histogram( до подтверждения какого-либо параметра.

Его следует выполнить после проверки:


if (kpi_name == null && chart_type == null && entity_name == null) // this check must be first
                return ...
if (chart_type == null)
                return ...
if (kpi_name == null)
                return ...
if (entity_name == null)
                return ...
// all checks were passed so you can get the histogram            
var result = _definitionRepository.histogram(entity_name,kpi_name,chart_type,unix_start,unix_end,language);

return Request.CreateResponse(HttpStatusCode.OK, result);

401 (ошибка аутентификации) выдается контроллером (или метод) помечается [Авторизоваться] автоматически. Однако вам следует как-то настроить аутентификацию веб-хоста . Это можно сделать с помощью кода в Startup.cs или с помощью конфигурации веб-сервера (IIS)

...