17

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 が発生します。どこが間違っているのか誰にもわかりますか? 参考までに、他の機能にも同じAPIコントローラーを使用しているため、APIのURLは問題ありません。

また、selectedClient() は WebApi 経由で受信した Client オブジェクトであるため、完全に一致して PUT を再開する必要があります。

4

5 に答える 5

23

IIS7 を使用していて、WebDav がインストールされている場合は、削除してみてください。PUT動詞でのみ同じエラーが発生し、問題を解決しました

更新: ここで WebDav について読むことができます: http://www.iis.net/learn/get-started/whats-new-in-iis-7/what39s-new-for-webdav-and-iis-7

于 2012-11-29T07:17:14.257 に答える
5

UpdateClient アクションに [HttpPut] 属性がありますか? また、{action} を routeTemplate として取り込むルートはありますか? 例えば:

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

もう 1 つ、「json」の代わりに、ajax コードの content-type に「application/json」を試してください。

于 2012-10-09T20:45:30.717 に答える
2

この 2 行が間違っていたようです。次のように変更しました。

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

そして今、入ります。

于 2012-10-09T20:44:27.990 に答える
1

今後のトラブルシューティング担当者への注意事項: 「Put」コントローラーが、使用されていない追加のパラメーターを意図せず予期していたときに、このエラーが発生しました。

于 2015-08-20T23:49:10.347 に答える