当前位置: 首页 > 编程语言 > C#

WebAPI-405-请求的资源不支持http方法'PUT'分享

时间:2023-04-10 18:47:32 C#

WebAPI-405-请求的资源不支持http方法'PUT'“PUT/Patch”请求。我从fiddler得到的响应是:HTTP/1.1405MethodNotAllowedCache-Control:no-cachePragma:no-cacheAllow:GET,POST,DELETECon??tent-Type:application/json;charset=utf-8过期:-1服务器:Microsoft-IIS/8.0X-AspNet-版本:4.0.30319X-SourceFiles:=?UTF-8?B?QzpcUHJvamVjdHNcZG90TmV0XFdlYkFQSVxBZFNlcnZpY2VcQWRTZXJ2aWNlXGFwaVxpbXByXPower.ASPBXByZX1WNlXGFwaVxpbXByZXW:Tue,06May201414:10:35GMTContent-Length:72{"message":"Therequestedresourcedoesnotsupporthttpmethod'PUT'."}根据上述回复,“PUT”动词不是公认。但是,我无法弄清楚相关处理程序的配置位置。该类的“Put”方法声明如下:[HttpPatch][HttpPut]publicHttpResponseMessagePut(Int32aID,[FromBody]ImpressionModelimpressionModel){bla,bla,bla,bla}我已阅读并实施了中解释的更改以下主题:-Asp.NETWebAPI-405-不允许用于访问此页面的HTTP动词-如何设置处理程序映射-http://www.asp.net/web-API/Overview/Testing和Debugging/Troubleshooting-HTTP-405-ERROR-发布后的web-api应用程序没有任何工作,因为我在尝试向我的web-api项目发出“PUT”命令时仍然收到405响应。我什至注释掉了ApplicationsHost.config文件中的所有“处理程序”。使用VS2012Premium和IISExpress(我假设它是版本8)。我也试过VSDevServer,但也给了我同样的结果。我没主意了。任何帮助将不胜感激。谢谢Lee你在使用属性路由吗?此神秘错误是路由属性问题。这在您的WebAPIConfig中启用为:config.MapHttpAttributeRoutes();事实证明,WebApi控制器“不能托管基于动词的动作方法和传统动作名称路由的混合。”;https://aspnetwebstack.codeplex.com/workitem/184简而言之:我需要在我的API控制器中使用[Route]属性标记我的所有操作,否则操作将在尝试时被“隐藏”(405'd)通过传统路由找到它。API控制器:[RoutePrefix("api/quotes")]publicclassQuotesController:ApiController{...//POSTapi/Quote[ResponseType(typeof(Quote))][Route]publicIHttpActionResultPostQuote(Quotequote){if(!ModelState.IsValid){返回BadRequest(ModelState);}db.Quotes.Add(引用);db.SaveChanges();returnCreatedAtRoute("",new{id=quote.QuoteId},引用);注意:我的路线未命名,因此CreatedAtRoute()名称只是一个空字符串。WebApiConfig.cs:publicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPI配置和服务config.Formatters.JsonFormatter.SupportedMediaTypes.Add(newMediaTypeHeaderValue("text/html"));//WebAPI路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name:"DefaultApi",routeTemplate:"api/{controller}/{id}",defaults:new{id=RouteParameter.Optional});希望这有用帮助我遇到了和你完全一样的问题,我尝试了你尝试过的一切,但有时解决方案是如此微不足道,在你的鼻子底下,你只是不指望它并继续寻找更复杂的原因。确保在测试您调用的URL中的Web方法时,参数名称与控制器方法声明中的名称相匹配。通过简单地执行此操作解决了我的405问题(我使用了查询参数):我的客户端控制器:...[HttpPut]publicstringPutClient(stringusername="",stringphone=""){...}在我的WebApiConfig上://WebAPI路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name:"DefaultApi",routeTemplate:"api/{controller}");测试方法的路由必须是:(使用Postman或类似工具,应用正确的Web方法)http://localhost:49216/api/clients?username=Kurt&phone=443332211否则您将在该控制器中获得该方法的405。我根本不需要更改web.config(不需要删除webdav等)。检查文档中的源代码:例如,考虑以下操作:publicvoidGet(intid)id参数绑定到URI。因此,此操作只能匹配路径字典或查询字符串中包含“id”值的URI。可选参数是一个例外,因为它们是可选的。对于可选参数,如果绑定无法从URI中获取值也是可以的。如果您忘记在API控制器上公开Put()方法,这也是返回的错误消息。这一点事后看来很明显,但让我头疼了十分钟。有同样的问题,我需要做3件事来解决它:当使用WebAPI和禁用Webdav时,确保HttpPut来自System.Web.Http,而不是来自System.Web.Mvc像这样启用ExtensionlessUrlHandler希望这对你们有帮助解决这个恼人的问题的一些人......这个答案为我解决了它。我不得不添加Route属性,问题就解决了。[HttpPut][Route("")]publicHttpResponseMessageMyMethod()我把PUT方法的第一个参数名改成publicvoidPut(intcode,[FromBody]Leadlead)的时候出现了这个应该是:publicvoidPut(intid,[FromBody]Leadlead)是这样调用的:$.ajax({type:"PUT",data:json,url:"../api/leadsapi/123",contentType:"application/json;字符集=utf-8"});你应该在你的网络服务器配置中配置它。这取决于您可以执行此操作的Web服务器的类型。例如,对于IIS,您可以使用web.config文件在文档根目录中执行此操作。对于跨源请求,您必须将CORS标头添加到响应中以允许源、方法等...注意:也许您可以使用ASP.NET框架对此做一些事情,但我认为它是不同的。在web.config的Handler部分下添加以下部分:例如:也许现在为时已晚,但有人可以使用它。我想使用PUT请求,我只是将字符串化的对象发送到webapi,而put方法只是接受该对象。JQUERYletmusterija={Name:姓名,Email:邮箱,Password:密码,Username:logUser.Username,Lastname:姓氏,GenderString:性别,Jmbg:身份证,PhoneNumber:电话,};$.ajax({method:"PUT",url:"/api/Musterija",data:JSON.stringify(musterija),contentType:"application/json;charset=utf-8",dataType:"json",成功:function(){alert("Entityupdated");EmptyAllInputs();$('#divprofile').show();$('#divupdate').hide();},error:function(msg){alert("失败-"+msg.responseText);}});WEBAPI以上就是C#学习教程:WebAPI-405-请求的资源不支持http方法'PUT'分享的所有内容,如果对大家有用需要详细了解C#学习教程,我希望大家多多关注——【HttpPut】publicHttpResponseMessagePutMusterija(Musterijam)本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: