2016年12月1日 星期四

將副檔名為 .ashx 的 API 改為 RESTful 路由 / Change the API named .ashx to RESTful.

在公司接到了一個需求,就是將副檔名為「.ashx」的 api,路徑改為「~/{Dir}/XXX/」的格式,
簡單說就是要把副檔名拿掉,而這些API很單純,全都是POST,廢話不多說,看code吧。
(下面以VB.NET為範例)

1、在 Global.asax 修改下列程式:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' 在應用程式啟動時引發
    RegisterRoutes(RouteTable.Routes)
End Sub

Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.Add("Item", New Route("{model}", New CompactRESTRouteHandler()))
    routes.Add("Directory", New Route("{directory}/{model}"
                          , New CompactRESTRouteHandler()))
End Sub
2、建立一個檔案:CompactRESTRouteHandler.vb
Friend Class CompactRESTRouteHandler
    Implements IRouteHandler

    Public Function GetHttpHandler(requestContext As RequestContext) 
                 As IHttpHandler Implements IRouteHandler.GetHttpHandler

        Dim RouteData = requestContext.RouteData
        '取出參數
        Dim directory As String = Convert.ToString(RouteData.Values("directory"))
        Dim model As String = Convert.ToString(RouteData.Values("model"))
        Dim id As String = Convert.ToString(RouteData.Values("id"))

        If String.IsNullOrEmpty(directory) = False Then
            HttpContext.Current.Items.Add("directory", directory)
        End If
        HttpContext.Current.Items.Add("model", model)
        If String.IsNullOrEmpty(id) = False Then
            HttpContext.Current.Items.Add("id", id)
        End If
        '檢查看看有無該Model對應的ASHX?
        Dim ashxName As String = Path.Combine(directory, model + ".ashx")
        '找不到對應的ASHX
        'If File.Exists(HostingEnvironment.MapPath("~/" + ashxName)) = False Then
        '    Return CType(BuildManager.CreateInstanceFromVirtualPath("~/NotFound.aspx", GetType(Page)), Page)
        'End If

        '導向指定的ASHX
        Return CType(BuildManager.CreateInstanceFromVirtualPath("~/" + ashxName, GetType(IHttpHandler)), IHttpHandler)
    End Function

End Class
參考文章: 逐步解說:在 Web Form 應用程式中使用 ASP.NET 路由逐步解說:在 Web Form 應用程式中使用 ASP.NET 路由 RESTful探索3-ASP.NET 3.5 Routing for REST

沒有留言:

張貼留言

Surface pro 6降頻至0.4GHz的解決方式

網路查到很多都說: 按住電源鍵30秒關機、再同時按住電源鍵+音量上鍵15秒重啟,解決。 實際試過是有效,但某一天看到當配件溫度過高,也是會造成降頻的原因之一, 索性就把電源線拔掉,神奇的事情發生了~~ cpu頻率就正常了 。 但其實當下電源供應器並沒有發熱的現象,只...