gpt4 book ai didi

rest - 在 ASP.Net Web API 中,如何伪造 PUT 和 DELETE?

转载 作者:行者123 更新时间:2023-12-01 02:33:58 25 4
gpt4 key购买 nike

我正在试验 ASP.Net Web API,按照惯例,它将 Controller 方法拆分为 Get()、Put、Post 和 Delete 的 Restful 风格。我的问题是如何处理可能来自非 Ajax 浏览器请求的 PUT 和 DELETE 请求。

所以,假设我有一个 id = 123 的 foobar。一个正常的获取请求是

/foobars/123

要删除该项目,Restful 方法是发出:
DELETE /foobars/123

然而, PUTDELETE如果您的请求来自非 Ajax 浏览器请求,则它们不是浏览器标准,并且没有足够的主要浏览器支持来信任。所以一个普遍接受的解决方法是:
POST /foobars/123?_method=DELETE (source: Restful Web Services)

对于新的 ASP.Net Web API,是否有解决此问题的最佳实践/通用方法?我想要的是任何带有 _method=DELETE 的东西路由到 DELETE() Controller 中的方法和 _method=PUT路由到 Controller 的 PUT() 方法。

最佳答案

您可以使用 DelegatingHandler 轻松实现这一点。 .

所以你会编码:

public class HttpMethodHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var queryString = HttpUtility.ParseQueryString(request.RequestUri.Query);
if(!string.IsNullOrEmpty(queryString["_method"]))
{
request.Method = new HttpMethod(queryString["_method"]);
}
return base.SendAsync(request, cancellationToken);
}
}

然后将处理程序添加到管道中。我有一个 blog在那。

关于rest - 在 ASP.Net Web API 中,如何伪造 PUT 和 DELETE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11213905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com