Rider 无法解析 nameof(OtherClass.Method)
Posted
技术标签:
【中文标题】Rider 无法解析 nameof(OtherClass.Method)【英文标题】:Rider can't resolve nameof(OtherClass.Method) 【发布时间】:2020-06-06 06:43:22 【问题描述】:重现步骤:
创建一个新的 .NET Core Web API 项目转到生成的WeatherForecastController
,将类更新为
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[HttpGet("id")]
public async Task<ActionResult<object>> GetById(int id)
return Ok(null);
创建第二个控制器
[ApiController]
[Route("[controller]")]
public class FooController : ControllerBase
[HttpPost]
public async Task<ActionResult<object>> Create()
return CreatedAtAction(nameof(WeatherForecastController.GetById), new id = 1 , null);
构建项目,应该没问题
Rider 在Create
路线出现错误
无法解析操作“GetById”
如你所见
这很烦人,因为 IDE 也在项目资源管理器中提供了它
虽然代码运行良好。那么我的代码很糟糕,我应该改进它吗?是bug吗?
【问题讨论】:
【参考方案1】:使用了错误的CreatedAtAction
重载。
它无法解析动作GetById
,因为使用的重载期望动作属于当前控制器(即FooController
)。
如果预期的操作属于另一个控制器,则需要包含控制器名称。
FooController:
//...
[HttpPost]
public ActionResult<object> Create()
return CreatedAtAction(
actionName: "GetById",
controllerName: "WeatherForecast", //Note removal of `Controller` suffix
routeValues: new id = 1 ,
value: null);
//...
参考ControllerBase.CreatedAtAction Method
【讨论】:
感谢您的回复。这并没有解决问题,即使使用像CreatedAtAction("GetProductByIdAsync", "ProductsController", new id = 1 , product);
这样的硬编码字符串,Rider 说它无法解析方法和控制器名称。
喜欢cdn.discordapp.com/attachments/165027329981153280/…左右cdn.discordapp.com/attachments/165027329981153280/…
@Question3r 这些链接对我不起作用。我收到拒绝访问消息
@Question3r 基于最后一张图片,controllerName
应该是Products
(没有Controller
后缀)
好的,所以这似乎工作return CreatedAtAction(nameof(ProductsController.GetProductByIdAsync), "Products", new id = 1 , product);
有什么办法我不必硬编码“产品”?就像通过nameof(ProductsController).RemoveSuffix()
删除后缀一样@以上是关于Rider 无法解析 nameof(OtherClass.Method)的主要内容,如果未能解决你的问题,请参考以下文章