我目前正在制作一个网站,以在谷歌地图上显示位置。我从Airtable.com数据库获取位置地址,并且一切正常。但是因为谷歌只允许一定数量的请求地理编码地址,我想将坐标保存在同一个数据库中,所以我只需要在需要查找新位置(地址)时使用地理编码api。我得到了所有设置,但我似乎无法弄清楚我如何从剃刀页面中的js调用cs方法。我过去曾使用过WebMethod,但我显然不能在这里使用它。
当我尝试使用我在网上找到的示例时,它说我需要RequestVerificationToken,但是需要来自表单内的调用(我是对吗?),当网站加载时我的ajax调用会被提示它从数据库中获取一个没有任何坐标的位置。
这是我第一次使用Razor Pages,所以如果我完全误解了某些内容,请耐心等待。
我想调用的cs方法的图片(Index.cshtml.cs) I tried with the httpPost tag, but it didn't make a difference
[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调用图片,基本上在页面加载时调用: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);
})
}
我知道有些代码并不完全符合我的要求,但我只是从网上复制过来,并且会在我遇到这个障碍时进行编辑。
答案 0 :(得分:3)
尝试返回正确的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);
})
}
非常有用的文章供参考
答案 1 :(得分:2)
在仔细阅读Handle Ajax Requests in ASP.NET Core Razor Pages后,我发现我确实误解了一些原则,你可以使用@ Html.AntiForgeryToken()
明确添加AntiForgeryToken而不使用“form”标签和