bugfix> c# > 投稿

HTTPポストを使用して更新する場合 たとえば、レコードは動作しますが、putを使用すると動作しません。 CRUDおよびHTTPメソッドに関する記事をいくつか読みましたが、既知のHTTP PUTは更新部分に関するものであり、WEB API専用ですか、それとも.net mvcプロジェクトで使用できますか?これが私のコードです

var times = GetTimes(); // times array object
var enrollmentId = $('#EnrolledSubject').data('id');
$.ajax({
    contentType: 'application/json; charset=utf-8',
    url: "/Subjects/UpdateTimes?enrollmentId="+enrollmentId,
    type: "PUT",
    dataType: "json",
    data: JSON.stringify({ 'times': times}),
    success: function (data) {
        console.log(data);
    },
    error: function (x, y, z) {
        console.log('error ' + y);
        OnAJAXError(x, y, z);
    }
});

およびMVCコントローラーのサブジェクト

[Route("UpdateTimes")]
[HttpPut]
public bool UpdateTimes(List<Time> times)
{
     return true;
}

回答 2 件
  • 問題は、iis構成に起因している可能性があります。これをweb.configに追加してみてください:

    <system.webServer>
        <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
    </system.webServer>
    
    

  • C#コードは私にとって変更されていないため、そのままにしておくことができます。

    aJaxの呼び出しに関しては、

    dataType、contentType、およびJSON.stringify()を削除します。私のものは以下です。

    あなたがくれたものから時間モデルを作成しました。データ型が正しいことを願っています

    public class Time
    {
        public int Day { get; set; }
        public string Code { get; set; }
        public string Room { get; set; }
        public bool ViewOnSchedual { get; set; }
    }
    
    

    javascript:

       function getRandomInt(max) {
            return Math.floor(Math.random() * Math.floor(max));
        }
        function GetTimes() {
            var arr = [];
            for (var i = 10; i--;) {
                var d = new Date();
                arr.push({
                    Day: getRandomInt(365),
                    Period: "abc_" + i,
                    Room: "room_" + i,
                    ViewOnSchedual: (i % 2 === 0) ? true : false
                })
            }
            return arr;
        }
        $("#put_time").off().on("click", function () {
            var times = GetTimes();  
            $.ajax({
                url: "/Home/UpdateTimes",
                type: "PUT",
                data: {"times": times},
                success: function (data) {
                    console.log("success")
                    console.log(data);
                },
                error: function (x, y, z) {
                    console.error("there was an error")
                    console.log(x, y, z)
                }
            });
        })
    
    

あなたの答え