在PUT上获取500和404请求ASP.net

时间:2017-10-24 11:00:48

标签: c# asp.net ajax visual-studio rest

我真的需要帮助! 我正在尝试使用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.
        }

3 个答案:

答案 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请求。 (您也可以右键单击控制台中的错误,然后单击“在网络面板中打开”)