我还不能流利地调用WebAPI服务.我成功完成了简单的项目,但现在我的需求变得越来越复杂,事情总是失败.
我将MVC 5用于WebAPI,并使用常规jQuery函数调用.
我的模特
在这里,我管理一个诊所的病人预约.我对Patient和Appointment实体使用以下模型:
public class Patient
{
// Personal data
public int Id { get; set; }
public string Name { get; set; }
}
public class Appointment
{
public int Id { get; set; }
public DateTime Date { get; set; } // date only
public int Order { get; set; }
public string PatientName { get; set; }
// Parent data
public Patient Patient { get; set; }
public int PatientId { get; set; }
public Organization Organization { get; set; }
public int OrganizationId { get; set; }
}
我的DTO
public class AppointmentDto
{
public int Id { get; set; }
public int Order { get; set; }
public string PatientName { get; set; }
public PatientDto Patient { get; set; }
}
public class PatientDto
{
public string Name { get; set; }
}
第一个案例
我想在一天内为约会设定新的订购.我发送JSON对象列表,其中包含要更改的约会ID和各自的订单.
服务行动:
[HttpPost]
public IHttpActionResult UpdateOrder(List<AppointmentDto> dto)
{
_unitOfWork.Appointments.UpdateOrder(dto);
_unitOfWork.Complete();
return Ok();
}
服务电话:
// Handler methods
var rearrangeAppointments = function (event, ui) {
// Json object to pass
var orderedAppointments = [];
// Looping through appointments
var i = 0;
$("#sortable").children().each(function () {
// Set new order
i++;
orderedAppointments.push({ "Id": this.getAttribute("data-id").toString(), "Order": i.toString() });
});
// Call service
appointmentsService.updateOrder(orderedAppointments, done, fail);
};
var updateOrder = function (orderedAppointmens, done, fail) {
$.ajax({
url: "/api/appointments",
method: "POST",
data: orderedAppointmens,
dataType: "Json"
})
.done(done)
.fail(fail);
};
服务成功调用,但传递的列表始终为空.我调试了JavaScript代码,并成功构建了JSON对象数组.还调试了MVC代码并测试了Postman服务,它工作得很好.此下拉将对象列表从客户端传递到服务器.
第二个案例
这次是接听电话.我希望获得列表,如果约会是否有更新视图的特定日期.
服务行动:
public IEnumerable<AppointmentDto> GetAppointments(DateTime date)
{
var organizationId = _unitOfWork.ApplicationUsers.GetorganizationId(User.Identity.GetUserId());
var appointments = _unitOfWork.Appointments.GetAppointments(date, organizationId);
return appointments.Select(Mapper.Map<Appointment, AppointmentDto>);
}
服务电话:
$("#datepicker").datepicker({
// Todo: Refactor to pettern
onSelect: function (dateText, inst) {
var selectedDate = $(this).datepicker('getDate');
var date = JSON.stringify(selectedDate);
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: "json",
url: "/api/appointments",
data: date,
success: function (appointments) {
alert("Service call succeeded!")
alert(appointments.length);
}
})
.fail(function () {
alert("Failure!");
});
}
});
当我在没有传递日期的情况下测试代码(将日期硬编码到action方法中)时,它的效果非常好.当我向参数添加日期时(在action方法和AJAX调用中),它根本不起作用.
我从这里和其他来源尝试了许多链接和文章但没有成功,如下所示:
Pass a datetime from javascript to c# (Controller)
Pass Date Values from Ajax Call to MVC
还有更多我不能在这里添加.
我认为在传递数据的两种情况下我的主要问题.
我在这里错过了什么?
解决方法:
对于第二种情况:你发送日期时间??如果您这样做,URL可能包含“:”(12:00)& HTTP请求拒绝此类型的字符
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。