【问题标题】:Param is null when making AJAX Request to controller in ASP.NET MVC Core在 ASP.NET MVC Core 中向控制器发出 AJAX 请求时,Param 为空
【发布时间】:2017-11-02 18:05:40
【问题描述】:

我有一个 ASP.NET Core Web 应用程序。我的一些调用(例如删除)我更喜欢使用纯 ajax 请求而不是使用实际的 MVC 表单和回发。我的控制器既有返回视图的操作,也有像下面的 delete 方法这样的操作,它们更像是一个 API。

使用下面的核心,我成功地进入了操作,但 id 参数始终为空。我做错了什么?

MVC 控制器:

    // POST: Users/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Delete([FromBody] string id)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var user = await _userManager.FindByIdAsync(id);
        if (user == null)
        {
            return NotFound();
        }

        await _userManager.DeleteAsync(user);

        return Ok(user);
    }

AJAX 请求:

            $.ajax({
                url: '@Url.Action("Delete", "Projects")',
                contentType: "application/json",
                type: "POST",
                headers:
                {
                    "RequestVerificationToken": '@GetAntiXsrfRequestToken()'
                },
                data: JSON.stringify({ "id": "ABC123" }),
                success: function () {
                    alert('Deleted Successfully');
                    // Remove row from grid.
                }
            });

在 ASP.NET MVC Web 应用程序中创建返回视图的操作和更像 API 调用的 AJAX 请求的操作是否很常见?我不认为它是 API 调用,因为我仍然想传递 AntiForgeryToken。

【问题讨论】:

  • 如果您使用例如 Postman 进行发布请求,参数是否仍然是 null?只是尝试验证URL.Action() 是否生成正确的 URL。

标签: c# asp.net ajax asp.net-core asp.net-core-mvc


【解决方案1】:

您发送一个 json 对象 { "id": "ABC123" },因此您的操作方法应该期望一些具有 id 属性的简单类:

public class Dto
{
   public int Id {get; set;}
}

public async Task<IActionResult> Delete([FromBody] Dto data)

【讨论】:

  • 有道理,但是如果控制器只想要一个简单的 Id 作为参数,你会建议我做什么。我应该将操作方法​​切换为 DELETE 类型并在 URL 中发送 id 吗?
  • @BlakeRivell 实际上是的,如果您可以随意使用另一个端点,并且您想遵循 REST 模式,那么带有 id 作为 URL 一部分的 HTTP Delete 方法是最合适的选择。跨度>
  • 我知道这可能是一个基于偏好的问题,但是当我进行纯 AJAX 调用并且不需要视图返回?您是否建议为不返回视图的任何内容创建一个 API 文件夹?
  • @BlakeRivell: ASP.NET Core 不像在旧的 ASP.NET 中那样进行 MVC/WebAPI 分离。它有一个 MVC 中间件,涵盖了所有这些,并且您可以从任何控制器返回视图或对象数据。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2021-08-09
  • 1970-01-01
  • 2018-12-22
  • 2018-11-18
相关资源
最近更新 更多