Vb.net 在ASP.NET MVC 4应用程序中,应该考虑什么样的控制器

Vb.net 在ASP.NET MVC 4应用程序中,应该考虑什么样的控制器,vb.net,asp.net-mvc-4,Vb.net,Asp.net Mvc 4,我使用System.Web.Mvc.Controller作为UI,使用System.Web.Http.ApiController作为API,为大型ERP应用程序创建Web界面原型。我已经找到了一种方法,可以通过这个问题使UI具有一定的可扩展性。现在我想知道,由于ApiController的严格性质,是否还有其他类我应该考虑提供一个开放式接口来定义自定义API事务。或者,在参数计数和类型可能不同的情况下,是否有某种方法可以以更开放的方式使用ApicController。。。可能通过接受Web AP

我使用System.Web.Mvc.Controller作为UI,使用System.Web.Http.ApiController作为API,为大型ERP应用程序创建Web界面原型。我已经找到了一种方法,可以通过这个问题使UI具有一定的可扩展性。现在我想知道,由于ApiController的严格性质,是否还有其他类我应该考虑提供一个开放式接口来定义自定义API事务。或者,在参数计数和类型可能不同的情况下,是否有某种方法可以以更开放的方式使用ApicController。。。可能通过接受Web API的对象参数?

,您可以尝试使用以下接口实现自定义操作选择器:

public class CustomActionSelector : IHttpActionSelector
{
    public override HttpActionDescriptor SelectAction(HttpControllerContext context)
    {
        var method = GetMethod(context);
        return new ReflectedHttpActionDescriptor(GetController(method), method);
    }

    private MethodInfo GetMethod(HttpControllerContext context)
    {
        // Locate the target method using the extensibility framework of your choice 
        // (for example, MEF, pure reflection, etc.)
    }    

    private HttpControllerDescriptor GetController(MethodInfo method)
    {
        return new HttpControllerDescriptor() 
        {
            ControllerName = method.DeclaringType.Name, 
            ControllerType = method.DeclaringType
        };
    }
}
要注册新的操作选择器,请将以下内容放置在global.asax文件的“应用程序启动”下:


希望这有帮助。

使ASP.NET web应用程序可扩展非常简单,因为ASP.NET在bin目录中搜索所有程序集中的控制器类。因此,如果提供定制的一方可以简单地将其代码编译成DLL并将其放入bin目录,那么您的web应用程序将从标准交付中获取其所有控制器以及控制器。例如,我在引用System.Web.Http和System.Web.Mvc的独立DLL中创建了以下类:


我只需编译它并将其复制到部署web应用程序的位置的bin目录,然后就可以访问它了http://localhost/MyApplication/api/CustomTest/ 并在预期响应中返回value1和value2。

太糟糕了,HttpControllerConfiguration属性不在MVC4中;它将允许我仅为一个ApiController指定IHttpActionSelector。还有什么方法可以通过自定义操作选择器将1个ApiController作为目标?现在,我的控制器类由WebApiConfig中定义的路由选择。这是否意味着我的控制器类(如果它依赖于路由)必须从ApiController派生。如果我想考虑另一种控制器,我也必须实现IHTTCPController选择器吗?@ BLUEMONKMN 1。我认为这是不可能的。2我会说,您需要从ApController派生的一些东西没有尝试导出,但是我假设框架在内部类型化来设置ControlReConnor和其他东西。
var config = GlobalConfiguration.Configuration;
config.Services.Replace(typeof(IHttpActionSelector), new CustomActionSelector());
Public Class CustomTestController
   Inherits ApiController

   Public Function GetValues() As IEnumerable(Of String)
      Return New String() {"value1", "value2"}
   End Function

End Class