如果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的时候 跳转到百度去