【问题标题】:Post via ajax doesn't send data通过 ajax 发布不发送数据
【发布时间】:2020-04-19 09:24:37
【问题描述】:

我在我的 MVC 应用程序中通过 ajax 发布的问题。我想发布一个字符串,但在控制器中我得到空值。我发现了很多类似的问题,但仍然找不到解决方案。 我的控制器:

[HttpPost]
    public async Task<ActionResult> AddCompany(string data)
    {
        Company company = new Company { Name = data };
        await _context.Companies.AddAsync(company);
        await _context.SaveChangesAsync();
        return Json(new { success = true });
    }

还有ajax代码:

$.ajax({
        url: '/api/companyApi/',
        type: 'POST',
        data: {
            data: JSON.stringify("abc")
        },
        dataType: 'json',
        success: function() {
            alert("The company added");
        },
        error: function () {
            alert('Error! Please try again.');
        }

    });

【问题讨论】:

  • 你的端点叫AddCompany你在哪里叫它?
  • 当我调用 /api/companyApi/addCompany 时,我收到 404 错误。控制器是带有路由 [Route("api/[controller]")] 的 ApiController。但是当我只调用 /api/companyApi/ 时,它会到达方法 AddCompany 但参数为 null。

标签: c# ajax post model-view-controller null


【解决方案1】:

您正在尝试使用/api/companyApi/ 路径。为了使其使用 default 路由工作,您需要进行适当的 Route 装饰。

控制器:

[Route("api")] //---> here is the change
public class YourControllerNameController

行动:

[HttpPost]
[Route("companyApi")] //---> here is the change
public async Task<ActionResult> AddCompany(string data)
{
    Company company = new Company { Name = data };
    await _context.Companies.AddAsync(company);
    await _context.SaveChangesAsync();
    return Json(new { success = true });
}

【讨论】:

  • 我没有显示整个控制器是我的错误,但companyApi 是我的控制器名称。它是 ApiController,它有路由 [Route("api/[controller]")]addCompany 是动作的名称,但是当我将其添加到 url ('/api/companyApi/addCompany') 时,它返回 404。当我只调用 '/api/companyApi/' 时,它会到达 addCompany 但参数为空。
  • 当您调用 '/api/companyApi/' 时,您的请求可以到达您的 AddCompany 方法,因为 AddCompany 是控制器中的单个默认 POST 端点。但我没有解释为什么data 参数为空,根据您在原始问题中提供的 JS 代码,它应该具有值
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2014-09-04
  • 2016-10-28
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多