休息 – 在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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-5 – 使用ASP.NET标识在两个项目中重叠用户登录
- asp-classic – 在Classic ASP中的应用程序范围中使用字典对
- asp.net-mvc – 在嵌套内容的区域上使用_ViewStart
- ASP.NET webforms中的模型Binder
- asp.net – 如何在ModalPopupExtender前显示CalendarExtend
- asp.net – 如何使用WebClient访问ASMX Web服务?
- Asp.net MVC企业级开发(02)---Log4net
- asp.net-mvc-2 – RedirectToRouteResult如何工作?
- asp.net-mvc – 具有自定义重定向的AuthorizeAttribute
- asp.net-mvc – 路由是在我的区域中找到控制器,但不是视图
推荐文章
站长推荐
- asp.net – 为什么要模拟HttpContext,如果它可以
- asp.net-mvc – 延迟加载在实体框架5中不起作用
- asp.net-mvc-3 – ViewBag在Extension Class中返
- asp.net – 与Entity Framework中的联结表有多对
- .net core 3.0_webapi项目使用Swagger提供接口帮
- asp.net-mvc-3 – 无法解析属性:User.Full_Name
- asp.net-mvc – 使用ViewModel模式与MVC 2强类型
- 将ASP.NET从1.1升级到2.0 – 任何问题?
- asp.net-mvc – 如何在ASP.net MVC中限制对控制器
- asp.net-mvc-3 – MVC3 – 如何输出要下载的文件
热点阅读