我正在尝试按照此book创建Web API。我到了第5章的末尾,当我发送一个应该在那时工作的POST请求时,我收到HTTP 500错误。我发送以下请求:
POST http://localhost:1424/api/v1/tasks HTTP/1.1
User-Agent: Fiddler
Content-Type: text/json
Host: localhost:1424
Content-Length: 38
{"Subject": "Fix something important"}
我尝试在TasksController AddTask方法的开头调试一个设置断点:
public IHttpActionResult AddTask(HttpRequestMessage requestMessage, NewTask newTask)
{
var task = _addTaskMaintenanceProcessor.AddTask(newTask);
var result = new TaskCreatedActionResult(requestMessage, task);
return result;
}
此时一切似乎都很好newTask.Subject ='修复重要的事情'。然后它进入AddTaskMaintenanceProcessor.AddTask:
public Task AddTask(NewTask newTask)
{
var taskEntity = _autoMapper.Map<Data.Entities.Task>(newTask);
_queryProcessor.AddTask(taskEntity);
var task = _autoMapper.Map<Task>(taskEntity);
// TODO: Implement link service
task.AddLink(new Link
{
Method = HttpMethod.Get.Method,
Href = "http://localhost:1424/api/v1/tasks/" + task.TaskId,
Rel = Constants.CommonLinkRelValues.Self
});
return task;
}
这里newTask是好的。然后进入这个:
public class AutoMapperAdapter : IAutoMapper
{
public T Map<T>(object objectToMap)
{
return Mapper.Map<T>(objectToMap);
}
}
但是当我进入下一步行动时,我得到了:
未找到Mapper.cs
找不到MapperEngince.cs 等等。
当它执行这些消息时,它会在AddTaskMaintenanceProcessor.AddTask中向taskEntity返回null。它进入
public void AddTask(Task task)
{
task.CreatedDate = _dateTime.UtcNow;
task.Status = _session.QueryOver<Status>().Where(
x => x.Name == "Not Started").SingleOrDefault();
/* task.CreatedBy = _session.QueryOver<User>().Where(
x => x.Username == _userSession.Username).SingleOrDefault();*/
task.CreatedBy = _session.Get<User>(1L); // HACK: All tasks created by user 1 for now
if (task.Users != null && task.Users.Any())
{
for (var i = 0; i < task.Users.Count; ++i)
{
var user = task.Users[i];
var persistedUser = _session.Get<User>(user.UserId);
if (persistedUser == null)
{
throw new ChildObjectNotFoundException("User not found");
}
task.Users[i] = persistedUser;
}
}
_session.SaveOrUpdate(task);
}
_session.SaveOrUpdate(任务)失败的地方;有消息
NHibernate.Exceptions.GenericADOException:无法插入: [WebApi2Book.Data.Entities.Task] [SQL:INSERT INTO [任务](主题, StartDate,DueDate,CompletedDate,CreatedDate,StatusId, CreatedUserId)VALUES(?,?,?,?,?,?,?);选择SCOPE_IDENTITY()] ---&GT; System.Data.SqlClient.SqlException:无法将值NULL插入“StatusId”列,表'WebApi2BookDb.dbo.Task';专栏 不允许空值。 INSERT失败。
我的猜测是,自动播放器设置中缺少某些内容,这就是所有值都为空的原因,但我刚开始使用它,所以我不知道。
该项目可以从here下载,它是第5章。在原始资料中,我没有收到缺少信息的消息,但