【问题标题】:How make a request in the browser to a DELETE http method in ASP.NET (.NET FRAMEWORK)如何在浏览器中向 ASP.NET (.NET FRAMEWORK) 中的 DELETE http 方法发出请求
【发布时间】:2020-05-31 00:35:12
【问题描述】:

laravel 或一些express.js 库中添加中间件以检查是否给出了名为_Method 的字段,这将在服务器到达时覆盖http 请求的实际http 方法,因为浏览器仅支持@987654326 @ 和 GET

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

如果是这样,我该如何使用它或者你知道这样的atricle。
如果没有,我如何自己创建这样的中间件。
我自己无法创建一个,因为HttpContext 中的HttpRequestreadonly,而HttpRequest 中的HttpMethod 也是readonly

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

【问题讨论】:

  • Web 服务器上有一些内置模块可以阻止某些 http 动词。在 IIS 中,该模块是 WebDAVModule。如果在 IIS 上运行的应用程序中存在此模块,则 DELETR Web 请求将被阻止。因此需要从应用程序中删除它以允许 DELETE 请求。 stackoverflow.com/questions/6147181/…
  • delete api 工作正常,我用邮递员测试过。问题是关于如何使用浏览器访问该 API。
  • 您可以使用 Ajax 从浏览器进行 API 调用。

标签: c# asp.net middleware .net-framework-version http-method


【解决方案1】:

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

[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');
    }
});

【讨论】:

  • 感谢您的贡献,但我在问题中提到了 ajax。我仍然想知道是否有问题中提到的中间件,是否可以自己制作一个,或者 ajax 是否是唯一的方法。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2011-08-21
    • 2010-11-06
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多