.NET CORE Razor Pages Ajax вызов метода C # - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я создаю сайт для отображения местоположений на карте Google.Я получаю адреса местоположения из базы данных Airtable.com и все там работает нормально.Однако, поскольку Google разрешает только определенное количество запросов к адресам геокодирования, я хочу сохранить координаты в той же базе данных, поэтому я использую API геокодирования только тогда, когда необходимо найти новое местоположение (адрес).Я все это настроил, но я не могу понять, как я вызываю метод cs из js на страницах бритвы.Я использовал WebMethod в прошлом, но я не могу использовать это здесь, очевидно.

Когда я пытаюсь использовать примеры, которые я нахожу в сети, он говорит, что мне нужен RequestVerificationToken, но для этого нужен вызов из формы (я прав?), И мой вызов ajax запрашивается, когдасайт загружается, и он получает местоположение из базы данных, которая еще не имеет координат.

Я впервые использую Razor Pages, так что потерпите меня, если я что-то не так понял.

Изображение моего метода cs, которое я хотел бы вызвать (Index.cshtml.cs) Я пытался использовать тег httpPost, но это не имело значения

    [HttpPost] // RequestVerificationToken
    public void OnPostGeoLocation()
    {
        // Just to test that it actually gets called
        Console.WriteLine("OnPostGeoLocation CALLED ####################################");
        Console.WriteLine("OnPostGeoLocation CALLED ####################################");
        Console.WriteLine("OnPostGeoLocation CALLED ####################################");
        Console.WriteLine("OnPostGeoLocation CALLED ####################################");
    }

Изображение Ajaxвызов из JavaScript, который в основном вызывается при загрузке страницы: AjaxCall

function updateRow(recordID, latLng) {
   console.log("REC_ID: " + recordID);
   console.log("LatLng: " + latLng);
   $.ajax({
       type: "POST",
       url: '/Index?OnPostGeoLocation', 
       contentType: "application/json; charset=utf-8",
       dataType: "json"
   }).done(function (data) {
       console.log(data.result);
   })
 }

Я знаю, что часть кода не совсем то, что мне нужно, но я просто скопировал из онлайн и будуредактировать, когда я опережаю это препятствие.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

После прочтения Обрабатывайте Ajax-запросы в ASP.NET Core Razor Pages более тщательно я выяснил, что я действительно неправильно понял некоторые принципы и что вы МОЖЕТЕ явно добавить AntiForgeryToken без тега "form", используя@ Html.AntiForgeryToken ()

Мой код выглядит следующим образом: enter image description here

И:

enter image description here

0 голосов
/ 29 мая 2018

Попробуйте вернуть правильный IActionResult результат.

[HttpPost]
public IActionResult OnPostGeoLocation() {
    // Just to test that it actually gets called
    Console.WriteLine("OnPostGeoLocation CALLED ####################################");

    return new JsonResult("OnPostGeoLocation CALLED ####################################");
}

Далее, когда вы делаете вызов, вам нужно вызвать правильный путь обработчика и включить маркер защиты от подделки, потому что Razor Pages предназначены для автоматическогозащищен от атак подделки межсайтовых запросов (CSRF / XSRF).

Обновлен вызов Ajax

function updateRow(recordID, latLng) {
    console.log("REC_ID: " + recordID);
    console.log("LatLng: " + latLng);
    $.ajax({
        type: "POST",
        url: '/Index?handler=GeoLocation', 
        beforeSend: function (xhr) {
            xhr.setRequestHeader("XSRF-TOKEN",
                $('input:hidden[name="__RequestVerificationToken"]').val());
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(function (data) {
        console.log(data.result);
    })
}

Очень полезная статья для справки

Обработка запросов Ajax вASP.NET Core Razor Pages

...