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命令。想法吗?

ASP中的HttpException.. NET MVC与EntityFramework和JSON

Andrei是对的-还有另一行导致了这个错误。正如stephbu在他的评论中提到的第3项:"流未被缓冲,迫使在开始编写标记之前编写响应头。"

这个场景是由

这一行引起的
Response.Flush();

在我提到的DB控制器代码之上