Доступ к веб-методам из библиотеки классов - PullRequest
0 голосов
/ 02 июля 2018

У меня есть метод WebMethod, определенный в одной из моих библиотек классов, к которому я хочу получить доступ на странице aspx.

У меня есть проект библиотеки классов, где я создал класс, который наследует System.UI.Page, у этого нового класса есть функция webmethod, называемая («GetUsername»). Теперь я ссылался на эту библиотеку в своем веб-проекте, и в default.aspx.cs я унаследовал новый класс (тот, который я создал выше в библиотеке классов). Теперь в aspx я написал функцию ajax для доступа к данным из базы данных, однако она выдает ошибку для параметра url ajax с 404.

Вот моя структура кода:

1. Библиотека классов:

[ScriptService]
    public class WebMethodLibrary : Page
    {
        [WebMethod]
        public static object GetCurrentUserName()
        {
            Alistar.Data.AlistarDataContext db = new Alistar.Data.AlistarDataContext();
            Guid gUser = new Guid("8FEF8333-F1AE-4E9E-95F9-07316CE39F73");
            var user = db.Users.Find(gUser);
            return new { Username = user.Username };
        }
    }

2. Код веб-страницы:

public partial class _default : WebMethodLibrary
    {
    }

3. Страница ASPX с вызовом Ajax:

$.ajax({
            url: 'GetCurrentUserName',
            dataType: 'json',
            type: 'post',
            contentType: 'application/json',
            data: {},
            processData: false,
            success: function (data, textStatus, jQxhr) {
                alert(JSON.stringify(data));
            },
            error: function (jqXhr, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        });

Может ли кто-нибудь указать, в чем может быть проблема?

1 Ответ

0 голосов
/ 02 июля 2018

Я думаю, что вы должны указать имя своей страницы aspx перед именем метода в URL. Вы упомянули, что имя вашей страницы - default.aspx, если оно находится в корневом каталоге, поэтому вызов будет аналогичен приведенному ниже, или вы должны добавить имя вашего каталога перед именем страницы.

$.ajax({
            url: '~/default.aspx/GetCurrentUserName',
            dataType: 'json',
            type: 'post',
            contentType: 'application/json',
            data: {},
            processData: false,
            success: function (data, textStatus, jQxhr) {
                alert(JSON.stringify(data));
            },
            error: function (jqXhr, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        });
...