【发布时间】:2018-04-20 06:47:21
【问题描述】:
我有一个看起来像这样的 MVC 控制器方法:
[HttpPost]
public async Task<JsonResult> Edit(Foo input)
{
if (ModelState.IsValid)
{
Foo current = await db.foos.FindAsync(input.Id);
current.SomeProp = input.SomeProp; // etc.
db.Entry(current).State = EntityState.Modified;
await db.SaveChangesAsync();
return Json(true, JsonRequestBehavior.AllowGet);
}
return Json(false, JsonRequestBehavior.AllowGet);
}
这在我在 Visual Studio 中调试时有效。当我不调试时,我得到 500。调试在这里有什么不同?
注意:我没有使用db.Entry(current).CurrentValues.SetValues(input);,因为Foo 的某些属性我不想在这里更改。
编辑:我不知道在不处于调试模式时如何获取异常详细信息。我尝试将其写入文件。这在调试模式下有效(throw new Exception("test"); 代替了仅在调试模式下有效的语句),但在不调试时我得到 401。 IIS 用户确实对该目录具有写权限。
【问题讨论】:
-
错误的详细信息是什么? 500 错误是一般调试的方法。
-
响应 500 = 服务器错误 = 您的代码有未处理的异常。添加一些日志记录、使用 windebug 或执行其他操作来确定异常是什么。有很多方法可以获取异常及其详细信息(类型、堆栈跟踪、内部异常等)。
-
@Igor 相信我,我试过了。经过几个小时的搜索,我无法找到任何方法来获取非调试模式下的异常。
-
@ErikPhilips 查看我的编辑。
-
使用ELMAH 记录异常。这是这类东西的事实上的标准。
标签: c# asp.net-mvc entity-framework