ASP中的HttpException.. NET MVC与EntityFramework和JSON
本文关键字:EntityFramework JSON MVC 中的 HttpException NET ASP | 更新日期: 2023-09-27 18:08:00
我想在数据库上做一个选择。但我得到以下错误(只有错误的第一行):
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below
[HttpException (0x80004005): Server cannot set content type after HTTP headers have been sent.]
System.Web.HttpResponse.set_ContentType(String value) +9752569
System.Web.HttpResponseWrapper.set_ContentType(String value) +14
System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext context) +177
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +27
my DBcontroller的一部分:
string sql = @"exec [results].[GetNewResults] '" + Sources + @"', '" + Searchstring + @"', '" + username + @"', '" + sessionid + @"'";
var result = dbcontext_hke.Database.SqlQuery<UnifiedResultset>(sql);
if (results == null)
{
Debug.WriteLine("results is null");
return Json(null);
}
Debug.WriteLine("results isn't null");
Debug.WriteLine(results);
return Json(results, JsonRequestBehavior.AllowGet);
my js的一部分:
var url = $('#initialrequest').val();
$.ajax({
url: url,
data: {sources, searchstring},
type: 'POST',
})
.success(function (result) {
for (var i = 0; i <= (9); i++) {
try {
console.log("lenght of result is :" + result.length);
add_error(result);
console.log("result is : " + result);
add_result(result[i].header, result[i].source, result[i].subsource, result[i].description);
} catch (err) {
add_error();
}
})
.error(function (xhr, status) {
$('#error').append(xhr.responseText);
console.log(xhr.responseText);
});
基本上经过一些研究,我发现这段代码作为一个(可能)类似问题的解决方案:
this.Context.Response.Write(response);
this.Context.Response.Flush();
谁可以解释给我是怎么回事,我怎么能修复它(或修改其他解决方案的代码)?
EDIT1:我已确保控制器获得信息。所以错误可能是在控制器和js之间的通信。什么好主意吗?
EDIT2:还添加
Response.BufferOutput = true;
在HomeController和DBController的Index()处不会改变任何东西
EDIT3:我确定问题是返回中的JSON。如果我返回一个不同的类型,它可以正常工作。有什么想法为什么会发生这种情况以及如何解决它吗?
EDIT4:我的代码不工作的原因是命令
var result = dbcontext_hke.Database.SqlQuery<UnifiedResultset>(sql);
不能立即执行。如果我想看看Debug.WriteLine(结果)里面的结果是什么,我只得到普通的sql命令。想法吗?
Andrei是对的-还有另一行导致了这个错误。正如stephbu在他的评论中提到的第3项:"流未被缓冲,迫使在开始编写标记之前编写响应头。"
这个场景是由
这一行引起的Response.Flush();
在我提到的DB控制器代码之上