我正在尝试使用asp.net上的c#在web api中构建post方法 mvc 4.每当我使用fiddler向这个api发布值时,我得到了 以下错误:
SqlDateTime溢出。必须在1/1/1753 12:00:00 AM之间 12/31/9999 11:59:59 PM
我在我的Web 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"}
答案 0 :(得分:0)
错误本身告诉解决方案 -
您正在指定不在这两个日期之间的DateTime值。只需在插入数据库之前检查日期。如果日期小于1/1/1753,则传递DateTime.MinValue,如果日期大于12/31/9999,则传递DateTime.MaxValue
答案 1 :(得分:0)
您传递的日期值'Msg_Date':"2012/02/23T00:00:00"
参数未正确解析(作为“已知”日期字符串) - 它没有时区/不匹配任何“已知”{{3 }}
请参阅date format
答案 2 :(得分:0)
您的问题是您正在将字符串解析为DateTime对象。如果Msg_Date
是DateTime对象,C sharp将尝试隐式转换。如果失败,则返回null。但是不允许数据库中DateTime对象的空值,因此会出现此异常。在将实体保存到数据库之前进行一些调试。找到合适的日期格式,因为这似乎是您的问题。
查看this帖子,或阅读一些documentation。
答案 3 :(得分:-1)
使用SqlTypes.SqlDateTime.MinValue
代替DateTime.MinValue
为我解决了这个问题。如果您已在代码中使用SqlTypes.SqlDateTime.MinValue.Value
个对象,则可以使用DateTime
。