ZFYCH_Love

Simply but Powerful

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  115 随笔 :: 1 文章 :: 36 评论 :: 18万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

在MVC中,controller中的Action和View中的.cshtml文件名称有一个对应的关系。

当不对应时,有以下几种情况发生:

一、找不到视图的错误

请求URL:http://localhost:13850/Customer/Create

controller中有对应的Action:

View中没有相应的视图

报错信息:

解决方式:在View中添加相应的View

二、找不到资源:

请求的URL:http://localhost:13850/Customer/Index

controller里没有相应的Action(有时候可能是在开发一段时间以后,修改了Action的名字,却没有相应的修改View的名字,但是请求的URL依然还是原来的导致的)

View里有相应的视图

错误信息:

解决方式,就是指定一个固定的“页”,在找不到资源时显示。具体如下:

Asp.Net MVC中的controller都是集成自Controller这个抽象类,在这个类中,定义了一个HandleUnknownAction 方法,左右就是在发生HTTP 404时,进行处理。

那么,我们可以在自己的controller里重写这个方法。

这样,在每次找不到相应的Action时,都能执行这个方法。去调用相应的View。

微软提供的方式是:

protected override void HandleUnknownAction(string actionName)

 {    

    try {        

        this.View(actionName).ExecuteResult(this.ControllerContext);    

      } catch (InvalidOperationException ieox )

      {        

         ViewData["error"] = "Unknown Action: \"" +Server.HtmlEncode(actionName) + "\"";        

         ViewData["exMessage"] = ieox.Message;        

         this.View("Error").ExecuteResult(this.ControllerContext);    

      }

}

也就是,输出错误页。

当然这也存在一个隐患,如果出现下面【三】的情况时,也就是只声明了一个HTTP.Post的方法,没有相应的Http.Get的同名方法,也能把通过这种方式,把页面加载出来。

怎么解决呢?答案就是:直接Response.Redirect("/",true),回到首页。

三、找不到资源:

请求URL:http://localhost:13850/Customer/Details

controller中的对应Action,定义为HTTP Post,且没有对应的Http Get的Action

View中有对应的视图

报错信息:

解决方式:加入一个同名Action,定义为HTTP GET:[AcceptVerbs(HttpVerbs.Get)]

posted on   xiaoyang_  阅读(35313)  评论(7编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示