1

想象一下以下內容:配置路由以允許點作爲擴展名?

客戶端應用程序,這是任何一個有控制權,調用的Web API的方法,但在擴展,如每一種方法結束:

/api/{controller}/{method}.ab 

怎麼可能配置ASP .NET web API,對於特定的控制器,允許擴展所調用的方法,但也允許現有的默認控制器繼續工作?

舉例來說,如果我們有一個方法調用GetCustomer,客戶端應用程序將調用GetCustomer.ab,但希望該呼叫路由到GetCustomer這是在控制器「客戶」的方法,所以是這樣的:

http://fake.com/api/SmallService/GetCustomer.ab 

SmallService是具體的控制器。

還有其他的控制器,但只想將這種類型的路由應用到特定的控制器。

由於性能和安全原因,啓用RAMMFAR也不是選項(RunAllManagedModulesForRequests)。

這是在.NET 4.6

回答

1

首先運行的ASP.NET Web API 2,配置web.config允許與特定文件擴展名的請求傳遞到MVC框架。

的問題是,IIS將處理.ab文件作爲靜態文件和 默認會不會路由假設.ab文件通過你的MVC應用程序 。 IIS處理該請求,並且您的MVC代碼永遠不會獲得路由到此文件的 機會。

總之,這裏的結構是什麼樣子,使.ab文件的工作:

<system.webServer> 
    <handlers> 
    <!-- other handlers --> 

    <add name="ABHandler" 
     path="*.ab" 
     verb="GET" type="System.Web.Handlers.TransferRequestHandler" 
     preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 

    <!-- other handlers --> 
    </handlers> 
</system.webServer> 

待辦事項注意到允許的謂詞的處理程序。根據服務需求進行相應更新。

接下來,如果像這些請求僅適用於一個控制器,則將路由映射到預期的控制器。

如果這些操作都屬於特定控制器,則可以應用基於約定的方法。

public static class WebApiConfig 
    public static void Register(HttpConfiguration config) { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 

     config.Routes.MapHttpRoute(
      name: "SmallServiceApi", 
      routeTemplate: "api/SmallService/{action}.ab", 
      defaults: new { controller = "SmallService" } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

還有另一種通過屬性路由的方式。

[RoutePrefix("api/SmallService"] 
public class SmallServiceController : ApiController { 
    //GET api/SmallService/GetCustomer.ab 
    [HttpGet] 
    [Route("GetCustomer.ab")] 
    public IHttpActionResult GetCustomer() { ... } 

} 

的缺點,這種方式,根據自己的喜好,是你必須標記所有在其各自的控制器的操作,如果有很多那麼這可能會變得非常重複。

+1

謝謝!其實這很有趣。我發現另一種方法,將以下內容添加到web.config中,它似乎可以工作:

+0

很高興您能夠使用它。 !! – Nkosi

+0

您應該將其添加爲您自己的問題的答案,以便具有類似問題的其他人可以從適用於您的解決方案中受益。 – Nkosi