MVC Http PUT无法正常工作

时间:2018-05-25 14:15:28

标签: c# ajax asp.net-mvc

当使用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 个答案:

答案 0 :(得分:1)

问题可能来自您的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>

答案 1 :(得分:0)

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)
            }
        });
    })