-1
var assetimage_id = $(this).closest(".assetImageWrapper").attr("data-assetimage_id");

    var dataToSend = JSON.stringify({ "Asset_ID": assetimage_id, "Description": $(this).val() });
        $.ajax({
            url: "/api/Assets/UpdateDescription",
            type: "PUT",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: dataToSend,
            success: function (data) {
                alert("success");
            }
    });

そして、これがヒットするはずのメソッドです。

 [HttpPut]
        public Asset UpdateDescription(int Asset_ID, string Description)
        {
            return new AssetsService().UpdateAssetDescription(Asset_ID, Description);
        }

何が奇妙に見えますか?メソッドは、Assets という Web API コントローラーで設定しています。他のすべてのメソッドは、そこから正常に機能します (GETS、POSTS)。これは、Visual Studio 2012 で F5 キーを押して実行しているときなので、IIS 構成は変更されていません。Api ルートがデフォルト ルートです。

そして、私の web.config はすべての動詞をサポートしています:

4

1 に答える 1

0

デフォルトでは、上記の「Asset_ID」や文字列「Description」などの単純なタイプが Uri からバインドされます。あなたのシナリオでは、本文でコンテンツを送信しているように見えるため、それに応じて API 署名を変更する必要があります。ところで、アクションに複数の FromBody パラメーターを指定することもできません。

複雑なモデルの場合、それらを含めるために作成されたビュー モデルが必要です。

作成後:

public class AssetEstimatedValueUpdate
    {
        public int Asset_ID { get; set; }
        public string EstimatedValue { get; set; }
    }

その後、それを渡すことができ、すべてがうまく機能します。

[HttpPut]
        public Asset UpdateDescription(AssetDescriptionUpdate _AssetDescriptionUpdate)
        {
            return new AssetsService().UpdateAssetDescription(_AssetDescriptionUpdate.Asset_ID, _AssetDescriptionUpdate.Description);
        }
于 2012-11-21T20:22:28.377 に答える