Web API Put请求生成一个Http 405方法不允许的错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

这里是PUT对我的Web API方法的调用- 方法的第三行(我从ASP.NET MVC前端调用Web API):

client.BaseAddresshttp://localhost/CallCOPAPI/

这里是contactUri

这里是contactUri.PathAndQuery

最后,这是我的405回应:

这是我的Web API项目中的WebApi.config:

        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "DefaultApiGet",
                routeTemplate: "api/{controller}/{action}/{regionId}",
                defaults: new { action = "Get" },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            var json = config.Formatters.JsonFormatter;
            json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
            config.Formatters.Remove(config.Formatters.XmlFormatter);

我尝试剥夺了传递PutAsJsonAsyncstring.Format("/api/department/{0}", department.Id)string.Format("http://localhost/CallCOPAPI/api/department/{0}", department.Id)没有运气的路径。

有没有人有任何想法,为什么我得到405错误?

提问于
用户回答回答于

所以,我检查了Windows功能,以确保我没有安装这个名为WebDAV的东西,并且它说我没有。无论如何,我继续,并将以下内容放在我的web.config(前端和WebAPI,只是可以肯定),现在它可以工作。我把它放在里面<system.webServer>

<modules runAllManagedModulesForAllRequests="true">
    <remove name="WebDAVModule"/> <!-- add this -->
</modules>

此外,通常还需要web.config在处理程序中添加以下内容

<handlers>
    <remove name="WebDAV" />
    ...
</handlers>
用户回答回答于

WebDav-SchmebDav .. ..确保你正确地创建了带有ID的网址。

PUT http://www.fluff.com/api/Fluff/123 HTTP/1.1
Host: www.fluff.com
Content-Length: 11

{"Data":"1"}

扫码关注云+社区