C# 不允许使用Web Api 2方法(405)

C# 不允许使用Web Api 2方法(405),c#,asp.net-web-api2,http-put,C#,Asp.net Web Api2,Http Put,我在VS2013中创建了一个默认的Web Api 2项目。控制器中的PUT操作如下所示: // PUT: api/Events/5 [HttpPut] [ResponseType(typeof(void))] public IHttpActionResult PutEvent(int id, Event @event) { if (!ModelState.IsValid) { return BadRe

我在VS2013中创建了一个默认的Web Api 2项目。控制器中的PUT操作如下所示:

    // PUT: api/Events/5
    [HttpPut]
    [ResponseType(typeof(void))]
    public IHttpActionResult PutEvent(int id, Event @event)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != @event.Id)
        {
            return BadRequest();
        }

        db.Entry(@event).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!EventExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }
<handlers>
      <remove name="WebDAV"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
我的web.config如下所示:

    // PUT: api/Events/5
    [HttpPut]
    [ResponseType(typeof(void))]
    public IHttpActionResult PutEvent(int id, Event @event)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != @event.Id)
        {
            return BadRequest();
        }

        db.Entry(@event).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!EventExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }
<handlers>
      <remove name="WebDAV"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
当我运行项目并尝试使用Postman调用api(使用原始json数据)时,服务器返回:

请求的资源不支持http方法“PUT”


我看了这篇文章,但没有看到我做了什么不同(除了我添加了
)。但是如果没有,它也不起作用。

结果是我不得不更改我的PUT操作并删除id:

// PUT: api/Events/5
[HttpPut]
[ResponseType(typeof(void))]
public IHttpActionResult PutEvent(int id, Event @event)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (id != @event.Id)
    {
        return BadRequest();
    }

    db.Entry(@event).State = EntityState.Modified;

    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!EventExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return StatusCode(HttpStatusCode.NoContent);
}

您正在使用
HttpPut
,因此无法从url获取id,只能从
[FromBody]
[FromUrl]
获取id作为参数参数。您的控制器是否名为
事件控制器
?您的
Event@Event
应该有一个
[FromBody]
attribute@gauravbhavsar身份证是个问题。当我移除它时,问题是solved@kwv84很高兴你解决了这个问题,请更新你的修复问题。