如何在浏览器中向 ASP.NET (.NET FRAMEWORK) 中的 DELETE http 方法发出请求

How make a request in the browser to a DELETE http method in ASP.NET (.NET FRAMEWORK)

laravel 或某些 express.js 库中添加中间件来检查是否给定了一个名为 _Method 的字段,这将在服务器到达时覆盖 http 请求的实际 http 方法, 因为浏览器只支持 POSTGET.

ASP.NET (.NET Framework)是否包含我刚才提到的内置中间件,我在网上找不到任何东西。

如果有的话,我怎么用或者你知道这样的文章吗
如果没有,我如何自己创建这样的中间件。
我无法自己创建一个,因为 HttpContext 中的 HttpRequestreadonlyHttpRequest 中的 HttpMethod 也是 readonly

或者是使用 preventDefault() and/or ajax 发送(例如)通过 javascriptDELETE 请求的唯一选择?

首先,您需要将 [HttpDelete] 属性分配给您在控制器或 API 中的函数。例如:

[HttpDelete]
public JsonResult MyDeleteFunction(int id)
{
    //Write your delete code here
    return Json("some responses");
}

然后在客户端,你可以使用ajax来做删除请求。

$.ajax({
    url: '/ControllerName/MyDeleteFunction',
    dataType: "json",
    type: "DELETE",
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({id: 123}),
    async: true,
    processData: false,
    cache: false,
    success: function (data) {
        alert(data);
    },
    error: function (xhr) {
        alert('error');
    }
});

经过一番挖掘,我发现后面在ASP.NET的链中,HttpContext变成了HttpContextBase。此上下文包含 GetHttpMethodOverride().
我在 github 上查找了该方法,因为它是 open source 并且 ASP.NET 确实包含上述​​的中间件。
您可以使用 HeaderFormQuery string 中的键 X-HTTP-Method-Override 覆盖实际的 http 方法,对于中间件,实际的 http 方法必须是 POST甚至考虑覆盖 http 方法。