Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将razor页面中ajax帖子的目标从controller中的api更改为;“代码隐藏”;在同一页面中发布处理程序_Jquery_Asp.net Core_Razor Pages - Fatal编程技术网

Jquery 将razor页面中ajax帖子的目标从controller中的api更改为;“代码隐藏”;在同一页面中发布处理程序

Jquery 将razor页面中ajax帖子的目标从controller中的api更改为;“代码隐藏”;在同一页面中发布处理程序,jquery,asp.net-core,razor-pages,Jquery,Asp.net Core,Razor Pages,我在index.cshtml razor页面上发布了以下ajax帖子,效果很好: create: { url: "/api/LearningTasks/create", type: "POST", dataType: "json" }, 它将帖子发送给我的控制器,代码接收工作正常。看起来是这样的: [HttpPost] [Route("api/LearningTasks/create")]

我在index.cshtml razor页面上发布了以下ajax帖子,效果很好:

create: {
            url: "/api/LearningTasks/create",
            type: "POST",
            dataType: "json"
        },
它将帖子发送给我的控制器,代码接收工作正常。看起来是这样的:

[HttpPost]
    [Route("api/LearningTasks/create")]
    public async Task<ActionResult<LearningTask>> CreateLearningTask(LearningTask learningTask)
    {
        _context.LearningTasks.Add(learningTask);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetLearningTask", new { id = learningTask.Id }, learningTask);
    }
 public async Task<IActionResult> OnPostAsync()
    {
        // This is where I want to have the send the data for the create operation instead of to /api/LearningTasks/create
        _context.LearningTasks.Add(LearningTask);
        await _context.SaveChangesAsync();

        return null;  
    }
[HttpPost]
[路线(“api/LearningTasks/create”)]
公共异步任务CreateLearningTask(LearningTask LearningTask)
{
_context.LearningTasks.Add(learningTask);
wait_context.SaveChangesAsync();
返回CreateDataAction(“GetLearningTask”,new{id=learningTask.id},learningTask);
}
我想更改我文章的目标,使其转到“代码隐藏”index.cshtml.cs。我希望接收的方法如下所示:

[HttpPost]
    [Route("api/LearningTasks/create")]
    public async Task<ActionResult<LearningTask>> CreateLearningTask(LearningTask learningTask)
    {
        _context.LearningTasks.Add(learningTask);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetLearningTask", new { id = learningTask.Id }, learningTask);
    }
 public async Task<IActionResult> OnPostAsync()
    {
        // This is where I want to have the send the data for the create operation instead of to /api/LearningTasks/create
        _context.LearningTasks.Add(LearningTask);
        await _context.SaveChangesAsync();

        return null;  
    }
公共异步任务OnPostAsync() { //在这里,我希望将创建操作的数据发送到/api/LearningTasks/create _context.LearningTasks.Add(LearningTask); wait_context.SaveChangesAsync(); 返回null; }
我曾尝试删除行
url:“/api/LearningTasks/create”
,并将其设置为
url:”,
,但都不起作用。如果您能帮助我们了解如何做到这一点,我们将不胜感激。

Razor页面的设计旨在自动防止跨站点请求伪造(CSRF/XSRF)攻击

您应该使用AJAX将请求头中的防伪令牌发送到服务器:

  • 使用
    @Html.AntiForgeryToken()
    显式添加,它将添加一个名为
    \uu RequestVerificationToken
    的隐藏输入类型

  • 在请求头中发送令牌:

    $.ajax({
        url: '/Index',
        type: 'POST',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("XSRF-TOKEN",
                $('input:hidden[name="__RequestVerificationToken"]').val());
        },   
    })
    .done(function (result) { })
    
  • 配置反伪造服务以查找X-CSRF-TOKEN标头:

    services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
    
  • 以下文章供您参考:

    参见