Как устранить ошибку: неожиданный токен «<» в запросе Asp.Net? - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь вызвать WebService в своем приложении ASP. Net и получаю следующую ошибку: Error: Unexpected token '<'. Пока что похоже на json проблему разбора, но я не уверен, как ее решить. В моем приложении есть менеджер данных, который вызывает хранимую процедуру из локальной базы данных SQL .mdf. По сути, это общедоступный DataTable с именем GetEventsByState (), и он хранится в моем DataAcessManager.cs файле. Он вызывается из WebService в моем файле App_Service.asmx.cs. Цель состоит в том, чтобы вернуть datatable как json в WebService, чтобы я мог затем вызвать его в моем app.js файле:

RII_Service.cs

    [WebMethod]
    public string GetListOfEventsByState()
    {
        _dtMgr = new DataAccessManager();
        //string state = st;
        /*HttpContext.Current.Response.Write(GetEventsData());*/
        DataTable EventsList = _dtMgr.GetEventsByState();
        var lst = EventsList.AsEnumerable()
            .Select(r => r.Table.Columns.Cast<DataColumn>()
                .Select(c => new KeyValuePair<string, object>(c.ColumnName, r[c.Ordinal])
                ).ToDictionary(z => z.Key, z => z.Value)
            ).ToList();
        //now serialize it
        try
        {
            string json = new JavaScriptSerializer().Serialize(lst);
            json = json.TrimEnd();
            return json;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }

This WebMethod затем вызывается в app.js при загрузке страницы следующим образом:

app.js

//Function to call Asp.Net Web Service and retrieve events list by state
var EventsData = esriRequest({
    url: "RII_Service.asmx/GetListOfEventsByState",
    content: {
    },
    dataType: "jsonp",
    handleAs: "json"
});
EventsData.then(
    function (response) {
        console.log(response);
        events_json = response;
....
}, function (error) {
    console.log("Error: ", error.message);
}); 

Когда я ставлю точки останова на RII_Service.cs для WebMethod GetListOfEventsByState (),он создает жизнеспособную строку json, которая выглядит следующим образом:

"[{\"FullEventName\":\"NJ Cindy 2005\",\"State\":\"NJ\"},{\"FullEventName\":\"NJ Gordon 2000\",\"State\":\"NJ\"}...]

Однако, когда он возвращается к запросу EventsData, он переходит прямо к ошибке. Любые подсказки или предложения относительно того, что я делаю здесь неправильно.

1 Ответ

1 голос
/ 12 декабря 2019

Похоже, это проблема с перетаскиванием xml / html в запрос app.js при вызове WebMethod в RII_Service.cs. Несмотря на то, что GetListOfEventsByState() показывает возвращаемый json string, тег <string> всегда будет обнаруживаться на стороне app.js (что объясняет ошибку '<'). Чтобы решить эту проблему, я сделал 2 вещи. Во-первых, сериализовать его, используя метод NewtonSoft.Json JsonConvert

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

* Возможно, вам придется сначала установить его, используя Инструменты> Пакет NuGet. Затем я использовал System.Web.HttpContext для форматирования вывода. Итак, я переработал свой WebMethod GetListOfEventsByState() следующим образом, и он заработал. Надеюсь, что это помогает всем, у кого есть подобные проблемы:

    [WebMethod]
    //public string GetListOfEventsByState()
    public void GetListOfEventsByState()
    {
        _dtMgr = new DataAccessManager();
        DataTable EventsList = _dtMgr.GetEventsByState();

        //now serialize it
        try
        {
            string JSONresult;
            JSONresult = JsonConvert.SerializeObject(EventsList);
            HttpContext.Current.Response.Write(JSONresult);
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
    }
...