string attName="case-converter"
[Route(attName)]
但它不起作用。错误说它需要一个非静态字段。 如何克服这一点?如果您在控制器中有10到15个操作,并且所有控件都需要相同的归因,那么您如何做?
您可以尝试创建不同的零件,并在中间软件中添加不同的约束, 我在下面尝试了
app.UseEndpoints(endpoints =>
{
Dictionary<string, string> actiondic = new Dictionary<string, string>();
actiondic.Add("Get", "{controller}/{action}/G");
actiondic.Add("Post", "{controller}/{action}/Po");
actiondic.Add("Put", "{controller}/{action}/Pu");
foreach (var key in actiondic.Keys)
{
endpoints.MapControllerRoute(name: key, pattern: actiondic[key], constraints: new { action = key });
}
});
控制器:
//Apicontroller and Route Attribute have been removed
public class WeatherForecastController : ControllerBase
{
......
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
......
}
[HttpPost]
public IEnumerable<WeatherForecast> Post(....)
{
.....
}
}
有关更多详细信息,您可以检查此document
不确定您要完成的工作,所以我只专注于您当前的代码工作。
申请答案使用常数:
const string attName="case-converter"
[Route(attName)]
长答案,您显示的错误未完成:
您不是静态的,这意味着每个控制器实例化可能会有所不同。因此,如果您实例化控制器3次(
attName
如果您使其静态:
new MyController(...)
,但是您会遇到另一个错误:一个属性参数必须是恒定的表达式,类型为typeser 或属性参数类型的数组创建表达式
这里的消息告诉您,它想要某些不会改变的东西。静态字段是静态的(因此解决了第一个错误),但它仍然是一个字段,因此该值可以随时更改。 thumbs的属性参数的rule:应该在编译时可用。如果在执行过程中可以更改,那就不正常。