加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

休息 – 在ASP.Net Web API中,你如何伪造PUT和DELETE?

发布时间:2020-12-16 09:51:30 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用ASP.Net Web API,按照惯例,它将控制器方法拆分为Restful样式的Get(),Put,Post和Delete.我的问题是如何处理可能来自非Ajax浏览器请求的PUT和DELETE请求. 所以,假设我有一个id = 123的foobar.正常的提取请求就是 /foobars/123 要删除该项目,Rest
我正在尝试使用ASP.Net Web API,按照惯例,它将控制器方法拆分为Restful样式的Get(),Put,Post和Delete.我的问题是如何处理可能来自非Ajax浏览器请求的PUT和DELETE请求.

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

/foobars/123

要删除该项目,Restful方式将是:

DELETE /foobars/123

但是,如果您的请求来自非Ajax浏览器请求,则PUT和DELETE不是浏览器标准,并且没有足够的主要浏览器支持可信任.因此,一个常见的解决方法是:

POST /foobars/123?_method=DELETE (source: Restful Web Services)

对于新的ASP.Net Web API,是否有最佳实践/常用方法来处理此问题?我想要的是将_method = DELETE路由到控制器中的DELETE()方法并将_method = PUT路由到控制器的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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读