2013-09-25 26 views
0

考慮下面這個簡單的網頁API,我已經從一個教程採取(不是一個MVC項目,只是一個空的ASP.NET網站的一部分):MapHttpRoute VS圖路線基本POST的WebAPI

Public Class AwesomeController 
    Inherits ApiController 

    Public Function [Get]() As String 
     Return "Hello. The time is " & DateTime.Now.ToString 
    End Function 

    Public Function Post(<FromBody> yourName As String) As String 
     Return String.Format("Hi {0}, you posted here at {1}", yourName, DateTime.Now.ToString) 
    End Function 

End Class 

我Global.asax的內創建路線是這樣的:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    GlobalConfiguration.Configuration.Routes.Add("default", New HttpRoute("{controller}")) 
End Sub 

這工作得很好,但我讀過的WebAPI路由最好使用MapHttpRoute創建,以便服務可以孤立存在。這是真的?

如果是這樣,任何人都可以發佈代碼來替換我的global.asax版本嗎?

更新

我想通了最後一位,但仍感激知道是否有一個「正確」的方法是什麼?

RouteTable.Routes.MapHttpRoute("default", "{controller}") 

回答

2

MapHttpRoute擴展方法很簡單,就是在註冊你的路由表HttpRoute實例的便捷方式。不過,使用簡寫方法手動創建並註冊HttpRoute是完全可以的。

如果您想了解MapHttpRoute的內部工作原理,請查看源代碼:HttpRouteCollectionExtensions.cs

+0

謝謝你。作爲路由新手,我沒有看到兩者之間的巨大差異。你說'MapHttpRoute'是速記,但是有沒有例子說明這對原始方法真的有用?是否還有其他原因?MapHttpRoute是通過一項節省時間的練習而開發的? – EvilDr

+1

@EvilDr MapHttpRoute可以更容易地指定其他參數,例如使用動態類型(而不是'HttpRouteValueDictionary'等)的默認路由值和約束。當你想指定一個自定義路由特定的'HttpMessageHandler'時,你將需要使用'HttpRoute'實例(參見http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Routing/HttpRoute。 CS)。 –

+0

好,太好了,謝謝 – EvilDr