【问题标题】:Rider can't resolve nameof(OtherClass.Method)Rider 无法解析 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吗?

【问题讨论】:

    标签: c# asp.net-core rider


    【解决方案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 说它无法解析方法和控制器名称。
    • @Question3r 这些链接对我不起作用。我收到拒绝访问消息
    • @Question3r 基于最后一张图片,controllerName 应该是Products(没有Controller 后缀)
    • 好的,所以这似乎工作return CreatedAtAction(nameof(ProductsController.GetProductByIdAsync), "Products", new { id = 1 }, product); 有什么办法我不必硬编码“产品”?就像通过nameof(ProductsController).RemoveSuffix()删除后缀一样@
    猜你喜欢
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多