Web API – 405 – 请求的资源不支持http方法’PUT’
我有一个Web API项目,我无法启用针对它的“PUT / Patch”请求。
我从小提琴手那里得到的回应是:
HTTP/1.1 405 Method Not Allowed Cache-Control: no-cache Pragma: no-cache Allow: GET,POST,DELETE Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcUHJvamVjdHNcZG90TmV0XFdlYkFQSVxBZFNlcnZpY2VcQWRTZXJ2aWNlXGFwaVxpbXByZXNzaW9uXDE1?= X-Powered-By: ASP.NET Date: Tue, 06 May 2014 14:10:35 GMT Content-Length: 72 {"message":"The requested resource does not support http method 'PUT'."}
根据上述回复,不接受“PUT”动词。 但是,我无法弄清楚相关处理程序的配置位置。
类的“Put”方法声明如下:
[HttpPatch] [HttpPut] public HttpResponseMessage Put(Int32 aID, [FromBody] ImpressionModel impressionModel) { bla, bla, bla, bla }
我已经阅读并实现了以下主题中解释的更改: – Asp.NET Web API – 405 – 不允许用于访问此页面的HTTP动词 – 如何设置处理程序映射 – http://www.asp.net/web -API /概述/测试和调试/故障排除-HTTP-405-错误-后发布的Web-API的应用程序
没有任何工作,因为我在尝试对我的Web API项目发出“PUT”命令时仍然得到405响应。
我甚至在ApplicationsHost.config文件中注释掉了所有“处理程序”。
使用VS2012 Premium和IIS Express(我假设它是版本8)。 我也尝试过VS Dev Server,但这也给了我同样的结果。
我没有想法。 任何帮助,将不胜感激。
谢谢李
你在使用属性路由吗?
这个神秘错误是一个路由属性问题。 这在您的WebAPIConfig中启用为:
config.MapHttpAttributeRoutes();
事实certificate,Web Api控制器“无法承载基于动词的动作方法和传统动作名称路由的混合。”; https://aspnetwebstack.codeplex.com/workitem/184
简而言之: 我需要使用[Route]属性在我的API控制器中标记我的所有操作,否则当尝试通过传统路由找到它时,操作将被“隐藏”(405’d)。
API控制器:
[RoutePrefix("api/quotes")] public class QuotesController : ApiController { ... // POST api/Quote [ResponseType(typeof(Quote))] [Route] public IHttpActionResult PostQuote(Quote quote) { if (!ModelState.IsValid) { return BadRequest(ModelState); } db.Quotes.Add(quote); db.SaveChanges(); return CreatedAtRoute("", new { id = quote.QuoteId }, quote); }
注意:我的Route未命名,因此CreatedAtRoute()名称只是一个空字符串。
WebApiConfig.cs:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
希望这可以帮助
我遇到了与你完全相同的问题,我尝试了你尝试的所有事情,但有时解决方案是如此微不足道,在你的鼻子下,你只是不指望它并继续寻找更复杂的原因。 确保在您调用的URL中测试Web方法时,param名称与控制器方法声明中的名称匹配。 通过简单地执行此操作(我使用查询参数)解决了我的405问题:
我的客户控制器:
... [HttpPut] public string PutClient(string username = "", string phone= ""){...}
在我的WebApiConfig上:
// Web API routes 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等)。 在文档中检查此源代码:
例如,请考虑以下操作:
public void Get(int id)
id参数绑定到URI。 因此,此操作只能匹配路径字典或查询字符串中包含“id”值的URI。
可选参数是一个例外,因为它们是可选的。 对于可选参数,如果绑定无法从URI获取值,则可以。
如果您忘记在API控制器上公开Put()方法,这也是返回的错误消息。 事后看来这是显而易见的,但却让我头疼十分钟。
有同样的问题,我需要做3件事来解决这个问题:
- 在
和
禁用Webdav - 使用WebAPI时,确保HttpPut来自System.Web.Http,而不是来自System.Web.Mvc
- 像这样启用ExtensionlessUrlHandler
希望这可以帮助你们中的一些人解决这个令人讨厌的问题……
这个答案为我解决了这个问题。 我不得不添加Route属性,问题解决了。
[HttpPut] [Route("")] public HttpResponseMessage MyMethod()
当我更改PUT方法的第一个参数名称时,这发生在我身上
public void Put(int code, [FromBody]Lead lead)
它应该是:
public void Put(int id, [FromBody]Lead lead)
这就是它的调用方式:
$.ajax({ type: "PUT", data: json, url: "../api/leadsapi/123", contentType: "application/json; charset=utf-8" });
您应该在webservers配置中配置它。 这取决于网络服务器的类型,您可以在哪里执行此操作。 例如,通过IIS,您可以使用web.config文件在文档根目录中执行此操作。 通过跨源请求,您必须将CORS头添加到响应中,以允许来源,方法等…
注意:也许您可以使用ASP.NET框架对此做些什么,但我认为它不同。
在web.config中的Handler部分下添加以下部分:
例如:
也许现在已经晚了,但有人可以使用它。
我想使用PUT请求,我只是将字符串化对象发送到web api,而put方法只接受该对象。
JQUERY
let musterija = { Name: name, Email: email, Password: password, Username: logUser.Username, Lastname: lastname, GenderString: gender, Jmbg: identification, PhoneNumber: phone, }; $.ajax({ method: "PUT", url: "/api/Musterija", data: JSON.stringify(musterija), contentType: "application/json; charset=utf-8", dataType: "json", success: function () { alert("Entity updated"); EmptyAllInputs(); $('#divprofile').show(); $('#divupdate').hide(); }, error: function (msg) { alert("Fail - " + msg.responseText); } });
WEB API
[HttpPut] public HttpResponseMessage PutMusterija(Musterija m)
- 运行代码第一次迁移update-database时出错
- 在ASP.NET Web Api中使用“ExceptionHandler”需要一个完整的示例来处理未处理的exception?
- 将嵌套集合发布到Web API
- 根据用户确定要在Json.Net中序列化的属性
- C#WebAPI序列化字符串列表
- ASP.NET MVC消息处理程序与Web API消息处理程序
- ASP.NET Web API的不同返回类型
- ASP.NET WebApi – 一个控制器中的多个GET操作
- 从MVC的DependencyResolver过渡到AutofacWebApiDependencyResolver – 哪里是.Current?