【发布时间】:2016-04-02 17:01:10
【问题描述】:
经过多次谷歌搜索、跟踪和错误以及挫折,这个让我难住了。
我在 Azure 上发布了一个 MVC 应用程序。我有一个控制器,它查询数据库并返回 Json 文件以用作 Fullcalendar 中的事件,如下所示:
public JsonResult Events()
{
var ci = from c in db.CalendarItems
select c;
var rows = new List<dynamic>();
foreach(var item in ci)
{
if (item.ClassTime.HasValue)
rows.Add(new { ID = item.Id, title = item.title, start = item.start.ToString("yyyy-MM-dd") + "T" + item.start.TimeOfDay.ToString(@"hh\:mm\:ss"), end = item.end.ToString("yyyy-MM-dd") + "T" + item.end.TimeOfDay.ToString(@"hh\:mm\:ss")});
}
return Json(rows, JsonRequestBehavior.AllowGet);
}
非常简单...在我的本地,这会生成一个非常好的文件,如下所示:
[{"ID":1,"title":"Event1","start":"2015-08-04T19:00:00","end":"2015-08-04T08:00:00"},{"ID":2,"title":"Event2","start":"2015-08-06T19:00:00","end":"2015-08-06T08:00:00"},{"ID":3,"title":"Event3","start":"2015-08-14T19:00:00","end":"2015-08-14T08:00:00"}]
但是,在已发布的 azure 网站上,我收到错误代码 500。
这是我迄今为止尝试过的:
-
将此添加到 web.config:
<configuration> <system.webServer> <staticContent> <mimeMap fileExtension=".json" mimeType="application/json" /> </staticContent> </system.webServer> 在我的 web.config 中将 httpErrors existingResponse = "PassThrough" 添加到 system.webServier。
对 web.config 文件进行大量调整
删除整个应用程序并在 azure 中重新创建它
我设置 customerrors mode=off 并且收到此错误:“已经有一个打开的 DataReader 与此命令关联,必须先关闭它。”只是为了确保我仔细检查了我的连接字符串并且 MARS 处于活动状态。也许是循环问题?
【问题讨论】:
-
您的 mvc 应用程序有其他操作吗?它是否返回响应?
-
至少在 Azure Web 应用程序上(我不知道 VM 上的 IIS),您不必担心在 Web 配置中设置 json mime 类型。您能否在事件日志中看到异常,或者您是否尝试关闭自定义错误以显示异常?也许只是在控制器中手动构建一个假事件,以将 db 排除在测试等式之外。
-
500 是内部服务器错误。您是否尝试过对您的操作进行异常处理。如果出现异常,您可以在 json 中返回消息以进行调试。或者您可以在 azure 站点上打开错误日志记录
-
只是 500 Server 的信息不会有多大帮助,尝试在 system.webserver 中设置 customerrors mode=Off 看看究竟是什么导致了错误
-
@dotnetstep 是的,所有其他操作都可以正常工作。
标签: c# json asp.net-mvc azure