Asp.net mvc 4 我可以将操作作为扩展方法添加到ApiController吗?

Asp.net mvc 4 我可以将操作作为扩展方法添加到ApiController吗?,asp.net-mvc-4,asp.net-web-api,extension-methods,Asp.net Mvc 4,Asp.net Web Api,Extension Methods,我正在构建一个MCV4WebAPI应用程序,我想让用户向该应用程序添加插件。它需要在不修改原始应用程序的情况下向APIController添加操作。 我想知道是否可以将这些操作添加为扩展方法,如下面的代码 //controller in the original application namespace MyApplication.Controllers { public class MyController : ApiController { //some a

我正在构建一个MCV4WebAPI应用程序,我想让用户向该应用程序添加插件。它需要在不修改原始应用程序的情况下向APIController添加操作。 我想知道是否可以将这些操作添加为扩展方法,如下面的代码

//controller in the original application
namespace MyApplication.Controllers
{
    public class MyController : ApiController
    {
        //some action
    }
}


//in user assembly
//user plug-in register route
config.Routes.MapHttpRoute(
                name: "userAction",
                routeTemplate: "api/{controller}/userAction/{id}",
                defaults: new { controller = "MyController", action = "userAction" },
            );


//also in user assembly
//extension method
using MyApplication.Controllers;
.........
public static class MyExtension
{
        [HttpGet]
        public static object userAction(this MyController c, int id)
        {
            return id;
        }
}
ablove代码不工作。当然,找不到操作


有这样的wa吗?

默认情况下,Web API在控制器类型中查找操作。扩展方法不是该类型的一部分,因此无法通过对该类型的反射找到它。如果需要不同的行为,可能需要提供自定义IActionSelector实现。这里展示了如何开发自定义IActionSelector实现的一个很好的示例


默认情况下,Web API在控制器类型中查找操作。扩展方法不是该类型的一部分,因此无法通过对该类型的反射找到它。如果需要不同的行为,可能需要提供自定义IActionSelector实现。这里展示了如何开发自定义IActionSelector实现的一个很好的示例