Параметры по умолчанию для IActionResult .Net Core - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время у меня есть проект Dashboard с большим количеством страниц.У них много параметров;однако у всех них есть несколько общих параметров.В приведенном ниже примере это будут companyCode и outputMode

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

Текущее состояние

RawController.cs

public IActionResult metric1(
  string companyCode 
  , int param1
  , string param2
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2(
  string companyCode 
  , int param3
  , string param4
  , string outputMode = "default"
)
{
  // DO STUFF
  return View();
}

Желаемое состояние будущего

UNKNOWN.cs (псевдокод)

public class CustomActionResult: IActionResult {
  this.companyCode = RouteValueDictionary["companyCode"];
  this.outputMode = RouteValueDictionary["outputMode"];
}

RawController.cs

public CustomActionResult metric1(
  int param1
  , string param2
)
{
  // DO STUFF
  return View();
}

public CustomActionResult metric2(
  int param3
  , string param4
)
{
  // DO STUFF
  return View();
}

Возможно ли это?Думаю ли я об этом совершенно неправильно?Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

После попытки реализовать ответ Джейкоба я понял, что на самом деле не хочу создавать пользовательскую версию IActionResult, я действительно хотел стандартизировать отправляемые параметры.В итоге оказалось гораздо более эффективным определить эти параметры в модели, отправить их через HTTP-запрос как JSON и проанализировать параметры URL, пока они не вписываются в эту модель.

Решение

metricModel.cs

public class standardParams
    {
        public string companyCode { get; set; }
        public string outputMode { get; set; } = "default";
    }

RawController.cs

public IActionResult metric1( 
  string standard_params
  , int param1
  , string param2 
)
{
  // DO STUFF
  return View();
}

public IActionResult metric2( 
  string standard_params
  , int param3
  , string param4  )
{
  // DO STUFF
  return View();
}

В IActionResults я могу получить доступ к стандартным параметрам, выполнив следующее:

standardParams p = JsonConvert.DeserializeObject<standardParams>(standard_params);
companyCode = p.companyCode;
outputMode = p.outputMode;

Для справки,переход к /Raw/metric1?standard_params={companyCode: "test"}&param1=1&param2=test2 дает следующие данные внутри контроллера:

p.companyCode = "test"

p.outputMode = "default"

param1 = 1

param2 = "test2"

0 голосов
/ 20 сентября 2018

Вы можете использовать базовый класс вместо или в дополнение к интерфейсу.Поскольку заполнение свойств по умолчанию будет частью реализации , вы не сможете сделать это только через интерфейс.

internal abstract class MetricActionResult: IActionResult {
    this.companyCode = RouteValueDictionary["companyCode"];
    this.outputMode = RouteValueDictionary["outputMode"];
}

public class CustomActionResult : MetricActionResult {
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...