C# MVC Http PUT不工作
例如,当使用HTTPPOST更新我的时间记录时,它可以工作,但当我使用put时,它不能工作。 我读过一些关于CRUD和HTTP方法的文章,众所周知HTTP PUT是用于更新部分的,是仅用于WEB API,还是我可以在.net mvc项目中使用它,而我做了一些错误的事情?这是我的密码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(
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配置上。