Вопрос:
Я пытаюсь создать почтовый метод в веб-api с помощью С# на asp.net mvc 4. Когда бы я ни опубликовал значение для этого api, используя скрипт, я получаю следующую ошибку:
Переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM
Я написал следующий код в контроллере веб-API. Я также создал уровень доступа к данным для доступа к данным в базе данных
public HttpResponseMessage PostMsg(MsgModel item) { if (ModelState.IsValid && item!=null) { using (dc = new MsgDataContext()) { var dbMsg = new Msg() { Msg_Title= item.Msg_Title, Msg_Date = item.Msg_Date, }; dc.Msgs.InsertOnSubmit(dbMsg); dc.SubmitChanges();// Getting the above error at this line of code var response = Request.CreateResponse<MsgModel>(HttpStatusCode.Created, item); string uri = Url.Link(«DefaultApi», new { id = dbMsg.Msg_Id}); response.Headers.Location = new Uri(uri); return response; } } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } I am posting the following request body from fiddler by executing the url http://localhost:65070/api/signup Request Body { ‘Msg_Title’:»our first msg», ‘Msg_Date’:»2012/02/23T00:00:00″} Ответ №1
Сама ошибка указывает на solution-
Вы назначаете значение DateTime, которое не находится между этими двумя датами. Просто проверьте дату перед вставкой в базу данных. Если дата меньше 1/1/1753, то передайте DateTime.MinValue и если дата больше 12/31/9999, пройдите DateTime.MaxValue
Ответ №2
Значение даты ‘Msg_Date’:»2012/02/23T00:00:00″ вы передаете, не обрабатывается должным образом (как “известная” строка даты) – он не имеет часового пояса/не соответствует любой “известный” формат даты.
Ответ №3
Ваша проблема заключается в том, что вы разбираете строку с объектом DateTime. Если Msg_Date является объектом DateTime, C sharp попытается использовать неявное преобразование. Если это произойдет, то null будет возвращено. Но значения null для объекта DateTime в вашей базе данных не допускаются, чтобы это исключение появилось. Сделайте некоторую отладку, прежде чем сохранять свою сущность в базе данных. Найдите подходящий формат даты, потому что это, кажется, ваша проблема. Проверьте это сообщение или прочитайте документацию.
Ответ №4
Использование SqlTypes.SqlDateTime.MinValue вместо DateTime.MinValue исправляет эту проблему для меня. SqlTypes.SqlDateTime.MinValue.Value можно использовать, если вы уже используете объекты DateTime в своем коде.