簡體   English   中英

如何構造返回JSON對象的服務器端數據源?

[英]How to structure a server-side datasource that returns JSON objects?

我目前是客戶端編程的新手,尤其是使用Jquery Ajax方法調用服務器端方法。

到目前為止,我已經使用System.Web.Services.WebService托管多個方法來返回String或bool。 這種方法的優勢在於,我可以將具有類似目的的方法“分組”,例如“注釋系統的方法”。 我已經讀過很多遍了,缺點是* .asmx服務已經過時,而且Json支持也不是很好。

我一直讀到,提供返回JSON對象的方法的好方法是使用通用處理程序(* .ashx)。 我過去編寫的通用處理程序每​​個處理程序僅提供一個“操作”。 使用通用處理程序處理JSON數據源是否可行? 我清楚地看到了無法對方法進行“分組”的缺點,因為每種方法都位於單獨的.ashx.cs文件中。 (我知道我可以傳遞第二個參數來確定應調用哪個“動作”,但感覺不正確)。

目前,使用WCF服務並不是一個值得的選擇,因為我使用的方法需要訪問會話並調整服務以達到相同的目的,這只是目前的矯kill過正。

我想真正的問題是: 在保持可讀性/服務端方法的結構的同時,返回JSON對象/ JSON對象列表的現代方法什么?

編輯 :我正在使用Webforms 4.0

我會堅持使用WebServices,而從它們返回的JSON從來沒有問題。 在jQuery中使用ajax也很簡單

    $.ajax({
        type: "POST",
        url: "/Methods/Zipcodes.asmx/GetPOIMarkersFrontendByTypeAndZip",
        data: "{latlng: '" + lat + "," + lng + "', type: '" + type + "', distance: '" + distance + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(html) {
        }
    }

是將數據傳遞到Web服務的簡短示例

    [WebMethod]
    public object GetPOIMarkersFrontendByTypeAndZip(string latlng, string type, string distance)
    {
        var db = new SQLConnectionDataContext();

        string[] zip = latlng.Split(',');
        IQueryable<POI> points = db.POIs;
        int dist = string.IsNullOrEmpty(distance) ? 0 : Convert.ToInt32(distance);

        List<POI> poi = type == "0"
                            ? points.ToList()
                            : points.Where(p => p.poiTypeId == Convert.ToInt32(type)).ToList();

        return (from item in poi
                where !string.IsNullOrEmpty(item.Lat) && !string.IsNullOrEmpty(item.Lng)
                let dDist =
                    DoCalc(Convert.ToDouble(zip[0]), Convert.ToDouble(item.Lat.Trim()), Convert.ToDouble(zip[1]),
                           Convert.ToDouble(item.Lng.Trim()))
                where dDist <= dist
                select new GoogleMapMarker
                           {
                               lat = item.Lat,
                               lng = item.Lng,
                               data = FpsFunctions.IsLanguageFrench() ? item.fr : item.gb,
                               tag = item.poiTypeId.ToString()
                           }).ToList();
    }

這將返回一個帶有4個變量的JSON數組供我使用。 不僅沒有問題,而且它還允許您像ASP.NET一樣動態地用數據填充html網站。 只是讓您轉而使用jQuery :)

我進入了MVC,這使這種事情變得容易得多。 但是,當我在WebForms中執行此操作時,我將使用一個或多個帶有操作參數的處理程序(ASHX)。 然后將評估action參數以調用將處理響應的適當目標方法。

如果您走這條路,就可以避免所有這些文件的麻煩。 而且,您不必在ajax調用中指定一個動作參數而失去的東西,就是不必指定其他文件名。

我建議看一下Web API

http://www.asp.net/web-api

ASP.NET Web API是一個框架,可輕松構建可訪問包括瀏覽器和移動設備在內的廣泛客戶端的HTTP服務。 ASP.NET Web API是在.NET Framework上構建RESTful應用程序的理想平台。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM