我真的需要帮助! 我正在尝试使用PUT请求更新数据库中的某些行,但它失败了。
当我没有进行任何更改并尝试发送id更新(PUT)时,它返回404,当我进行一些更改时,它返回500。 有人有想法吗?感谢
我有一个关于我的数据库调用的表:“课程”。
这是我在DB的表格:
create table Lessons
(
lesson_id char(9) primary key,
lesson_name nvarchar(20) not null,
lesson_days nvarchar(50),
lesson_start_time time,
lesson_duration float(10),
capacity int check(capacity >=0),
instructor_name nvarchar(25) ,
training_type nvarchar(15) not null,
gear nvarchar(80)
);
这是我的ajax电话:
$.ajax({
dataType: "json",
url: "/api/lesson/update",
contentType: "application/json; charset=utf-8",
type: "PUT",
data: JSON.stringify(targetData),
success: onSuccess,
error: onError
});
在targetData中我正在发送一个JavaScript对象,其中包含与我在数据库中的表格一样的确切字段。
这是LessonController的PUT方法:
// PUT api/lesson/update
[Route("api/lesson/update/")]
public HttpResponseMessage Put([FromBody]Lesson updated_lesson)
{
bool succeed = new Lesson().UpdateLesson(updated_lesson); // Holds true if the lesson updated successfuly in the database.
if (succeed)
return Request.CreateResponse(HttpStatusCode.OK, updated_lesson.lesson_name);
return Request.CreateResponse(HttpStatusCode.NotFound, "");
}
这是函数UpdateLesson,它属于Lesson类(classLibrary EF):
public bool UpdateLesson(Lesson updated_lesson)
{
try
{
myGymDBConnection db = new myGymDBConnection();
Lesson l = db.Lessons.Single(x => x.lesson_id.ToLower() == updated_lesson.lesson_id.ToLower());
l.lesson_name = updated_lesson.lesson_name;
l.lesson_days = updated_lesson.lesson_days;
l.lesson_start_time = updated_lesson.lesson_start_time;
l.lesson_duration = updated_lesson.lesson_duration;
l.capacity = updated_lesson.capacity;
l.instructor_name = updated_lesson.instructor_name;
l.training_type = updated_lesson.training_type;
l.gear = updated_lesson.gear;
var new_lines = db.SaveChanges();
if (new_lines == 0)
return false;
}
catch (Exception e)
{
throw e;
}
return true; // means that the lesson is updated successfuly in the database.
}
答案 0 :(得分:0)
$.ajax({
dataType: "json",
url: "/api/lesson/update",
contentType: "application/json; charset=utf-8",
type: "PUT",
data: JSON.stringify(targetData),
success: onSuccess,
error: onError
});
数据:JSON.stringify(targetData)
在此处您可以从课程对象创建字符串。在Api端点中,您获取的对象不是字符串。试着删除这一行。
答案 1 :(得分:0)
如果你正在使用API,你应该为它添加地址,这样(这可能会解决你的404错误):
$.ajax({
dataType: "json",
url: "http:localhost:5000/api/lesson/update",
contentType: "application/json; charset=utf-8",
type: "PUT",
data: JSON.stringify(targetData),
success: onSuccess,
error: onError
});
答案 2 :(得分:0)
仔细检查您的Lesson
类:它应至少包含与targetData
相同的属性,并且应使用[DataContract]
属性进行修饰。然后,每个属性都应使用[DataMember]
属性进行修饰。
编辑:你也应该在chrome的调试窗口的Network选项卡中调试xhr请求。 (您也可以右键单击控制台中的错误,然后单击“在网络面板中打开”)