如何传递属性部分的字符串参数? 我在控制器(使用ASP.NET Core)中有许多动作。我将路由属性用于路由目的。而不是使用 [路线(“案例连接器”)] 在每个动作中,我都试图声明

问题描述 投票:0回答:2
在每个动作中,我都试图在此属性字段中声明字符串并引用该字符串。

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(....) { ..... } }
string asp.net-core attributes
2个回答
1
投票
结果:

有关更多详细信息,您可以检查此
document

enter image description here不确定您要完成的工作,所以我只专注于您当前的代码工作。 申请答案使用常数:

const string attName="case-converter" [Route(attName)] 长答案,您显示的错误未完成:


0
投票
需要对象引用

您不是静态的,这意味着每个控制器实例化可能会有所不同。因此,如果您实例化控制器3次(

attName

),则3个控制器实例可能具有不同的值。
如果您使其静态:

new MyController(...)

,但是您会遇到另一个错误:

一个属性参数必须是恒定的表达式,类型为typeser 或属性参数类型的数组创建表达式

这里的消息告诉您,它想要某些不会改变的东西。静态字段是静态的(因此解决了第一个错误),但它仍然是一个字段,因此该值可以随时更改。
thumbs的属性参数的rule:应该在编译时可用。如果在执行过程中可以更改,那就不正常。
    
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.