所以我想知道是否可以将Controller作为参数发送给另一种方法。我要完成的工作是通过采用两个参数(控制器名称和方法名称)来创建一种类似于文件路径构建器的方法。
我在Controller中有一个方法,如下所示:
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方法中内置的字符串beeing返回给我的控制器。问题是,当我尝试将其作为参数传递时,控制器出现错误。错误消息说“ CountyController”是一种类型,在给定的上下文中无效。
任何答案都值得赞赏。
答案 0 :(得分:0)
您正在寻找两个属性:
var action = ControllerContext.ActionDescriptor.ActionName;
var controller = ControllerContext.ActionDescriptor.ControllerName;
答案 1 :(得分:0)
我设法通过以下方式简单地传递了控制器和方法:
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;
}
}
答案 2 :(得分:0)
您可以使用System.Reflection做到这一点:
// Current class name
this.GetType().Name
// Current method name
MethodBase method = MethodBase.GetCurrentMethod();
请注意,Reflection的使用是相对较慢/昂贵的操作,也许最好坚持使用字符串常量。
答案 3 :(得分:0)
由于未传递类实例,因此收到此错误。您可以做的就是更改您的方法,使其接受一个类型,然后从那里可以使用类名。像这样:
public async Task GetActiveCountyRegulationByIdSuccess()
{
FilePathBuilder builder = new FilePathBuilder();
builder.FilePath(typeof(CountyControllerTest), typeof(GetActiveCountyRegulationByIdSuccess));
...
然后builder方法接受两个类型参数并使用它们的名称:
public class FilePathBuilder
{
public string FilePath(Type controllerType, Type methodType)
{
var filePath = "testfiles/" + controllerType.Name + methodType.Name + "Actual.xml";
return filePath;
}
}