Как передать контроллер (имя контроллера) в качестве параметра другому методу? - PullRequest
0 голосов
/ 19 февраля 2019

, поэтому мне интересно, возможно ли отправить контроллер в качестве параметра другому методу.Я пытаюсь создать метод, который действует как компоновщик Filepath, принимая два параметра (имя контроллера и имя метода).

У меня есть метод в контроллере, как показано ниже:

  public async Task GetActiveCountyRegulationByIdSuccess()
    {

        FilePathBuilder builder = new FilePathBuilder();
        builder.FilePath(CountyControllerTest,GetActiveCountyRegulationByIdSuccess);
        ...

Итак, мой контроллер называется CountyControllerTest, а мой метод - GetActiveCountyRegulationByIdSuccess.Я хочу отправить эти два параметра:

 public class FilePathBuilder
   {

    public string FilePath(object controller, object method)
       {
        var filePath = "testfiles/" + nameof(controller) + nameof(method) + "Actual.xml";

        return filePath;
       }
   }

и вернуть строку, встроенную в метод FilePath, обратно в мой контроллер.Проблема в том, что я получаю ошибку в своем контроллере, когда пытаюсь передать его в качестве параметра.Сообщение об ошибке говорит о том, что 'CountyController' является типом, который недопустим в данном контексте.

Любые ответы приветствуются.

Ответы [ 4 ]

0 голосов
/ 19 февраля 2019

Вы получаете эту ошибку, потому что вы не передаете экземпляр класса.Что вы можете сделать, так это изменить свой метод так, чтобы он принимал тип, и оттуда вы можете узнать имя класса.Вот так:

  public async Task GetActiveCountyRegulationByIdSuccess()
    {

        FilePathBuilder builder = new FilePathBuilder();
        builder.FilePath(typeof(CountyControllerTest), typeof(GetActiveCountyRegulationByIdSuccess));
        ...

И тогда метод построителя принимает 2 параметра типа и использует их имена:

public class FilePathBuilder
   {

    public string FilePath(Type controllerType, Type methodType)
       {
        var filePath = "testfiles/" + controllerType.Name  + methodType.Name + "Actual.xml";

        return filePath;
       }
   }
0 голосов
/ 19 февраля 2019

Мне удалось передать свой контроллер и метод просто:

FilePathBuilder builder = new FilePathBuilder();
builder.FilePath(nameof(CountyControllerTest), nameof(GetActiveCountyRegulationByIdSuccess));

А в моем методе FilePath:

public class FilePathBuilder
{

    public string FilePath(object controller, object method)
    {
        var filePath = "TestFiles/" + controller + "/" + method + "Actual.xml";

        return filePath;
    }
}
0 голосов
/ 19 февраля 2019

Вы можете сделать это с помощью System.Reflection:

// Current class name
this.GetType().Name
// Current method name 
MethodBase method = MethodBase.GetCurrentMethod();

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

0 голосов
/ 19 февраля 2019

Вы ищете два свойства:

  var action = ControllerContext.ActionDescriptor.ActionName;
  var controller = ControllerContext.ActionDescriptor.ControllerName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...