【问题标题】:400 Bad Request when trying Ajax call to Controller in ASP.NET MVC在 ASP.NET MVC 中尝试对控制器进行 Ajax 调用时出现 400 错误请求
【发布时间】:2019-07-24 16:15:02
【问题描述】:

所以我一直在努力在我的 ASP.NET MVC 网站应用程序中从 CSHTML 页面向控制器发出简单的请求。我正在使用 Ajax 来尝试 DELETE 调用:

$.ajax({
    url: "/company/delete",
    type: "DELETE",
    success: function (e) {
        showAlert('Success!');
    }
});

并且只是在控制器端返回一个 JSON:

public class CompanyController : BaseController
{
    protected readonly IHttpClientFactory _clientFactory;

    public CompanyController(IHttpClientFactory clientFactory)
    {
        _clientFactory = clientFactory;
    }

    [HttpDelete]
    [Route("company/delete")]
    public JsonResult DeleteCompany()
    {
        return Json("ok");
    }
}

BaseController.cs:

[Authorize(Policy = "IsLoggedIn")]
public class BaseController : Controller
{ }

我看到的所有其他实现都是这样的。我尝试使用@Url.Action("DeleteCompany", "Company") 作为Ajax URL,删除路由并请求/Company/DeleteSite,在我使用身份验证时添加[AllowAnonymous] 标签,没有任何效果。它总是会返回一个400 Bad Request错误(至少不是404)。

我没有启动项目,所以我不知道是否有任何其他配置可以设置和从View访问Controller。请注意,我可以从 Ajax 访问我的 API,也可以从 Controller 访问 API,但我无法通过 Ajax 从 View 访问 Controller。

【问题讨论】:

  • 您是否尝试过指定[Route("/company/delete")]? (注意前面的斜线)
  • @Alexander 刚试过,还是收到错误 400 返回,同样的情况。
  • 您可能需要为删除添加动词。不确定默认情况下是否存在。您确定要使用 DELETE 而不是 get 或 post 吗?公司是文件吗?
  • @pcalkins 不只是 DELETE 方法不起作用,我尝试过使用 POST 和 GET。
  • 请同时发布您的控制器类代码

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


【解决方案1】:

原来是错误的 IIS 配置。添加规则以接受每种类型的请求都有效。

这是web.config中的处理程序:

<add name="aspNetCore" path="*" verb="GET,HEAD,POST,DEBUG,DELETE,PUT" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="None" />

【讨论】:

    【解决方案2】:

    将控制器函数的返回类型更改为 ActionResult 而不是 JsonResult

    [HttpDelete]
    [Route("company/delete")]
    public ActionResult DeleteCompany()
    {
        return Json("ok");
    }
    

    【讨论】:

    • 它有什么变化?
    猜你喜欢
    • 2017-01-24
    • 2021-11-21
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2019-05-21
    • 2019-12-26
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多