为了账号安全,请及时绑定邮箱和手机立即绑定

.NET CORE Razor Pages Ajax 调用 C# 方法

.NET CORE Razor Pages Ajax 调用 C# 方法

C#
喵喵时光机 2021-07-06 13:01:24
我目前正在制作一个网站来在谷歌地图上显示位置。我从 Airtable.com 数据库中获取了位置地址,那里的一切都运行良好。然而,因为谷歌只允许一定数量的地理编码地址请求,我想将坐标保存在同一个数据库中,所以我只在需要查找新位置(地址)时才使用地理编码 api。我完成了所有设置,但我似乎无法弄清楚如何在剃刀页面中从 js 调用 cs 方法。我过去曾使用过 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 ####################################");    }来自 JavaScript 的 Ajax 调用图片,基本上是在页面加载时调用:AjaxCallfunction 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 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

尝试返回正确的IActionResult结果。


[HttpPost]

public IActionResult OnPostGeoLocation() {

    // Just to test that it actually gets called

    Console.WriteLine("OnPostGeoLocation CALLED ####################################");


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

}

接下来,在进行调用时,您需要调用正确的处理程序路径并包含防伪令牌,因为 Razor 页面旨在自动保护免受跨站点请求伪造 (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);

    })

}


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信