若是ActionInvoker找不到对应的action,默认会运行contorller类的HandleUnknownAction。而HandleUnknownAction会响应默认HTTP 404asp.net
在 asp.net MVC 里面 全部的controller 默认都继承于 System.Web.Mvc.Controller这个类,因为在System.Web.Mvc.Controller里HandleUnknownAction被标注了virtual ,因此 这个方法是能够替换的。ide
即咱们能够本身重写HandleUnknownActionspa
using mytest2.DBContext; using mytest2.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace mytest2.Controllers { public class guestsController : Controller { // // GET: /guests/ public ActionResult Guest() { mytestContext db = new mytestContext(); guests guest = db.guests.FirstOrDefault(); return View(guest); } [HttpPost] public ActionResult Guest(guests guests) { if(ModelState.IsValid) { return Content("success"); } else { if(string.IsNullOrEmpty(guests.name)) { ModelState.AddModelError("name","姓名不能为空"); } } return View(); } protected override void HandleUnknownAction(string actionName) { Response.Redirect("https://www.baidu.com/"); } } }
这样 就在咱们找不到action的时候 跳转到百度去.net