2017-04-21 162 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,您可以在您的自定義實現中委託給它。