如果ActionInvoker找不到对应的action,默认会运行contorller类的HandleUnknownAction。而HandleUnknownAction会响应默认HTTP 404
在 asp.net MVC 里面 所有的controller 默认都继承于 System.Web.Mvc.Controller这个类,由于在System.Web.Mvc.Controller里HandleUnknownAction被标注了virtual ,所以 这个方法是可以替换的。
即我们可以自己重写HandleUnknownAction
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的时候 跳转到百度去