C# MVC Http PUT不工作

C# MVC Http PUT不工作,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,例如,当使用HTTPPOST更新我的时间记录时,它可以工作,但当我使用put时,它不能工作。 我读过一些关于CRUD和HTTP方法的文章,众所周知HTTP PUT是用于更新部分的,是仅用于WEB API,还是我可以在.net mvc项目中使用它,而我做了一些错误的事情?这是我的密码 var times = GetTimes(); // times array object var enrollmentId = $('#EnrolledSubject').data('id'); $.ajax(

例如,当使用HTTPPOST更新我的时间记录时,它可以工作,但当我使用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;
}

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

删除数据类型、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)
            }
        });
    })

使用.NET core?尝试去掉JSON.stringify方法。我在过去遇到过这样的问题,我将JSON序列化为一个字符串,而服务器需要JSON,因此它不会读取我的调用,因为它认为它得到的是一个字符串。您可以通过重写方法来测试这一点,这样它就可以使用字符串而不是列表对象。我正在使用.NET Framework 4.6.2 web应用程序。我将编写一个快速脚本供您测试。我可以举一个时间模型的例子吗?但是使用POST方法它是有效的。谢谢christian,原来问题出在iis配置上。