C# MVC中System.Web.Mvc.HttpHandlerUtil相关错误求助
错误分析与解决方案
1. 解决GET请求返回Json被阻止的错误
MVC默认禁止GET请求返回Json,以此防范JSON劫持风险。你需要在所有返回Json的Action中添加JsonRequestBehavior.AllowGet参数:
修改AddKolon和DeleteKolon方法的返回语句:
// AddKolon方法内的返回分支 return Json("Basarili", JsonRequestBehavior.AllowGet); return Json("Bos", JsonRequestBehavior.AllowGet); return Json("Hata", JsonRequestBehavior.AllowGet); // DeleteKolon方法内的返回 return Json("Basarili", JsonRequestBehavior.AllowGet);
2. 解决布局页的HttpException错误
该错误通常由布局页中子请求(如@Html.Action()或@RenderAction())执行失败引发,结合你的代码,需修复以下潜在问题:
2.1 EF实体延迟加载导致的上下文释放问题
你的Colons类存储的Sutun.Kolonlar是EF实体对象,而控制器中的db是局部变量,Index方法执行完毕后DBKatalogEntities会被自动释放。若视图遍历Model.Kolons时访问Kolonlar属性,会触发延迟加载,但此时上下文已释放,进而引发布局页子请求异常。
解决办法:将EF实体转换为DTO(数据传输对象),避免直接存储EF实体到Session
- 创建
KolonDto类:
public class KolonDto { public int ID { get; set; } public string KolonTuru { get; set; } public string KolonAdi { get; set; } // 按需添加其他属性 }
- 修改
AddColon方法,转换EF实体为DTO:
public void AddColon(Kolonlar kolon) { _kolonlar.Add(new Sutun() { Kolonlar = new KolonDto() { ID = kolon.ID, KolonTuru = kolon.KolonTuru, KolonAdi = kolon.KolonAdi } }); }
- 更新
Sutun类的属性类型:
public class Sutun { public KolonDto Kolonlar { get; set; } }
2.2 检查布局页中的子请求
打开_Layout.cshtml,查看是否存在@Html.Action()或@RenderAction()代码,确认对应的Action能正常返回视图,无异常抛出(比如子请求Action返回Json未加AllowGet也会触发错误)。
2.3 确保Session对象可序列化
给Colons、Sutun、KolonDto类添加[Serializable]特性,保证Session能正确存储和读取对象:
[Serializable] public class Colons { // 现有代码 } [Serializable] public class Sutun { // 现有代码 } [Serializable] public class KolonDto { // 现有代码 }
3. 其他潜在问题修复
AddKolon方法中,你修改了EF实体kolon.KolonAdi = KolonAdi;但未保存到数据库,若为误操作请移除该行;若需保存,需添加db.SaveChanges();。DeleteColon方法可简化,直接移除目标对象即可,无需遍历所有项:
public void DeleteColon(Sutun kolon) { _kolonlar.Remove(kolon); }
内容的提问来源于stack exchange,提问作者Muhammet Emin
相关产品推荐
相关产品推荐

