2017-04-21 163 views
0

我们正在从web api迁移到asp .net mvc核心,我在web api中有一个动作选择器,其中如果存在URL“$”符号的任何我们用来调用特定方法在控制器中。 低于这个功能,我们在网页API使用ApiControllerActionSelector实现了代码来执行的Web API相同 -ApiControllerActionSelector等效于Asp .net MVC核心

public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { 
      string urlDecode = HttpUtility.UrlDecode(
       controllerContext.Request.RequestUri.ToString()); 
      if (urlDecode != null && urlDecode.Contains("$")) { 
       if (controllerContext.Request.Method == HttpMethod.Post) { 
        MethodInfo method = controllerContext.ControllerDescriptor.ControllerType 
         .GetMethod(
          "PostCustomOperation"); 
        return 
         new ReflectedHttpActionDescriptor(
          controllerContext.ControllerDescriptor, method); 
       } 
       if (controllerContext.Request.Method == HttpMethod.Get) { 
        MethodInfo method = controllerContext.ControllerDescriptor.ControllerType 
         .GetMethod(
          "GetCustomOperation"); 
        return 
         new ReflectedHttpActionDescriptor(
          controllerContext.ControllerDescriptor, method); 
       } 
      } 
      HttpActionDescriptor result = base.SelectAction(controllerContext); 
      return result; 
     } 

我无法找到一个等价方式的ASP.NET MVC的核心做同样的,我想实现IRouter,但我们必须指定控制器,但这并不是我所知道的。 任何有关如何实现相同或不可能在Asp.net MVC核心中做的建议?

回答

0

你想要的是IActionSelector。您可以在ConfigureServices中为其注册一个实现,services.AddSingleton<IActionSelector, CustomActionSelector>()。默认实现是ActionSelector,您可以在您的自定义实现中委托给它。