405 Сообщение, метод не разрешен в Web Api

У меня есть следующее на контроллере API:

public void UpdateClient(Client client)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Entry(client).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
        catch
        {
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
        }
    }

И следующее на странице:

$.ajax({
            url: "api/client/UpdateClient",
            type: "PUT",
            contentType: 'json',
            data: ko.toJSON(model.selectedClient()),
            success: function (result) {
                getClients();
                $("#loader").hide();
            },
            failure: function (result) {
                alert(result.d);
                $("#loader").hide();
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("An error occurred, please try again.");
                $("#loader").hide();
            }
        });

Но это выдает ошибку 405 Method Not Allowed, может кто-нибудь увидеть, где я, возможно, ошибся? Для справки, URL для API в порядке, так как я использую тот же контроллер API для других функций.

Также selectedClient () - это объект Client, полученный через WebApi, поэтому он должен идеально соответствовать PUT up.

 user116690509 окт. 2012 г., 22:09
IIS Express, поставляемый с VS 2012 Express для Интернета
 user116690509 окт. 2012 г., 22:24
Какие глаголы я могу изменить в главном файле, хотя, тамдовольно много
 Amit Kumar Ghosh08 июл. 2015 г., 12:43
или можно отключить публикацию WebDAV изControl Panel
 nemesv09 окт. 2012 г., 21:55
Какой веб-сервер вы используете? Потому что в IIS вы должны вручную включить Put и Delete см.forums.iis.net/t/1166025.aspx
 nemesv09 окт. 2012 г., 22:13

Ответы на вопрос(5)

попробуйте удалить его. Я получал ту же ошибку только с глаголом PUT, и это решило проблему

Обновление: Вы можете прочитать о WebDav здесь:http://www.iis.net/learn/get-started/whats-new-in-iis-7/what39s-new-for-webdav-and-iis-7

 Brij10 апр. 2013 г., 17:00
+1 тоже самое для IIS 8 тоже
 Vipul21 февр. 2013 г., 09:59
+1, это решило мою проблему, но что, если мы хотим, чтобы этот модуль тоже?
 Amit Kumar Ghosh08 июл. 2015 г., 12:42
или можно отключитьWebDAV издательский от.Control Panel
 Sven08 мая 2013 г., 13:07
В моем случае я также должен был добавить кsystem.webServer раздел (я 'м на IIS8).
 Salman12 мар. 2013 г., 08:57
Попробуйте добавить следующее в ваш файл web.config <codesystem.webServer>     <модули runAllManagedModulesForAllRequests = "правда ">             <удалить имя = "WebDAVModule "/>     </ модули> </system.webServer>
Решение Вопроса

эти две строки были неправильными, я изменил их следующим образом:

contentType: 'application/json',
data: "{client: " + ko.toJSON(model.selectedClient()) + "}",

И сейчас идет.

что в свойствах проекта я использовал Local IIS вместо IIS Express, и он по умолчанию использовал порт 80, который блокировал запросы DELETE. Изменение в IIS Express исправило это.

я получил эту ошибку, когда мой "Положил" контроллер непреднамеренно ожидал дополнительный параметр, который не былт используется.

ого, есть ли у вас маршрут, который принимает {action} как routeTemplate? Например:

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

Еще одна вещь, попробуйтеПрименение / JSON» для типа содержимого в вашем коде Ajax вместо 'JSON.

Ваш ответ на вопрос