我还不能流利地调用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,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] 举报,一经查实,本站将立刻删除。