【问题标题】:Extend ApiController扩展 ApiController
【发布时间】:2022-02-26 23:22:30
【问题描述】:

正如标题所示,我想扩展 ApiContoller 类以包含一些自定义属性和辅助方法,但每当我尝试将它用于控制器时,我都会收到消息 Multiple actions were found that match the request:

示例代码:

public class ExtendedApiController : ApiController {
    public string SomeHelper() {
    ....
    }
}

public class AccountController : ExtendedApiContoller {
    public void Post (ModelObject obj){
        string x = SomeHelper();
        ...Bunch of business logic
    }
}

出于某种原因,Web Api 似乎不喜欢我这样做,或者我需要覆盖其他一些基本方法。我能看到的唯一其他选择是将扩展方法附加到 ApiContoller 但如果可能的话我想避免这种情况。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    你可以使用[NonAction]属性:

    public class ExtendedApiController : ApiController {
    
       [NonAction] 
       public string SomeHelper() {
        ....
        }
    
    }
    

    更多信息here, at the bottom of the page。

    【讨论】:

    • 解决了!我不会想到它会在方法上匹配,因为签名不符合 Get/Post/Put/Delete 等。
    【解决方案2】:

    ASP NET WebAPI 在配置之前使用约定,因此它会尝试找到一个以Get... 开头的方法用于 GET 请求,Post... 用于 POST 请求,以此类推用于 PUT 和 DELETE。

    所以也许你有 2 种方法,以 Get...、Post...、Put... 或 Delete... 开头

    【讨论】:

    • 不,这是一个新项目,到目前为止我只有 1 个控制器(除了 ExtendedController)。我想知道是否因为继承链是 3 级深,这可能是原因,一些内部反射被绊倒了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2020-09-10
    • 2014-09-23
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多