2013-06-28 2 views
1

Для удовольствия, я думал, что я хотел бы попробовать это:Можно ли использовать динамический прокси-сервер в качестве контроллера?

public class RouteConfig 
{ 
    public static void BuildProxy() 
    { 
     AssemblyName dynasm = new AssemblyName("Dynasm"); 
     AssemblyBuilder asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(dynasm, AssemblyBuilderAccess.Run); 
     ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule(dynasm.Name); 

     TypeBuilder typeBuilder = modBuilder.DefineType("MyProxyController"); 
     MethodBuilder action = typeBuilder.DefineMethod("Action", MethodAttributes.Public, CallingConventions.Standard, 
      typeof(String), Type.EmptyTypes); 

     ILGenerator ilGen = action.GetILGenerator(); 
     ilGen.Emit(OpCodes.Ldstr, "The value to return"); 
     ilGen.Emit(OpCodes.Ret); 

     Activator.CreateInstance(typeBuilder.CreateType()); 
    } 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     BuildProxy(); 

     routes.AppendTrailingSlash = true; 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute("Proxy", "Proxy/Action", new { controller = "MyProxy", action = "Action" }); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Идея заключается в основном для создания класса во время выполнения, а также использовать его в качестве контроллера. По какой-то причине, однако, когда я перехожу к /Proxy/Action, механизм маршрутизации, похоже, не видит мой класс. Почему это?

ответ

2

MVC route engine ищет Controller классы для маршрутизации запроса в нужное место.

Вместо этого вы должны реализовать интерфейс IRouteHandler! Вот пример для примера, который вы начинаете Routing for Proxy

Смежные вопросы