Я создал проект Web Api 2 по умолчанию в VS2013. Мое действие 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);
}
Мой web.config выглядит так:
<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>
И у меня есть следующий код в моем WebConfig.cs
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Когда я запускаю проект и пытаюсь сделать вызов (PUT с необработанными данными json) в API с помощью Postman, сервер возвращается с:
Запрошенный ресурс не поддерживает http-метод PUT.
Я просмотрел этот пост, но не вижу, что Делаю по другому (Разве что добавил <remove name="WebDAV" />
). Но без него тоже не работает.
HttpPut
, поэтому вы можете получить идентификатор не из URL-адреса, а из[FromBody]
или[FromUrl]
в качестве аргумента параметра. - person gaurav bhavsar   schedule 13.01.2016EventsController
? ВашEvent @event
должен иметь атрибут[FromBody]
- person Alexey   schedule 13.01.2016