【问题标题】:Web API Controller not found on PUT在 PUT 上找不到 Web API 控制器
【发布时间】:2015-08-13 16:59:32
【问题描述】:

我无法找到 web api 2 控制器的 put 操作。我是 使用 MVC5。找到控制器中的 GET 操作,并且在调用时运行良好。我尝试了几种不同的方法来解决这个问题,但无济于事。我会很感激任何提示。

jquery 调用:

 var data = {
        id: 1,
        text: 'test'
    };

var jsondata = JSON.stringify(data);
$.ajax({
    url: serviceRoot  + "Approval/" +  id,
    type: 'PUT',
    contentType: "application/json; charset=utf-8",
    data: jsondata,
    success: function (results) {
        alert('Content saved.');
    }
})

控制器中使用的请求对象:

public class ContentRequest
    {
        public int id { get; set; }
        public string text { get; set; }
    }

从启动开始的路线:

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

控制器:

using System.Collections.Generic;
using System.Web.Http;
using System.Net;
using System.Net.Http;

namespace SeacretGarden.Web.Controllers
{
    public class ApprovalController : ApiController
    {

        [HttpPut]
        public IHttpActionResult Put(int id, ContentRequest content)
        {
            return StatusCode(HttpStatusCode.NoContent);
        }
    }
}           

编辑: 我的问题的解决方案是将以下内容添加到我的 web.config 文件中: (我将 MVC5 与 Web API 控制器一起使用)

<modules>
      <remove name="FormsAuthentication" />
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <remove name="WebDAV"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0"
           path="*."
           verb="*"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />

    </handlers>

【问题讨论】:

  • 你有没有看到这个信息:asp.net/web-api/overview/testing-and-debugging/…——这是一个常见的问题。
  • 现在审查。我认为我忽略了一些 web.config 设置。
  • 这个配置问题如此普遍的主要原因是因为有一些开箱即用的场景,配置已经出现了“问题”——表面上这是一个试图保持vanilla 配置尽可能安全(即保护更容易被滥用的东西,例如 PUT 或 PATCH http 动词,除非明确启用)。
  • 感谢 cmets。大卫,这篇文章给了我一些关于我需要添加的 web.config 文件的想法。它们是我编辑的问题的一部分。再次感谢。
  • 所以看来主要问题是有 WebDAV,而没有 ExtensionlessUrlHandler。

标签: jquery asp.net-mvc asp.net-web-api asp.net-mvc-5 put


【解决方案1】:

我的问题的解决方法是将以下内容添加到我的 web.config 文件中:(我正在使用带有 Web API 控制器的 MVC5):

<modules>
      <remove name="FormsAuthentication" />
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <remove name="WebDAV"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0"
           path="*."
           verb="*"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />

    </handlers>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2020-07-31
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多