我正在阅读关于mvc的一篇关于不受控制的行动的文章http://www.codeproject.com/Articles/874284/ASP-NET-MVC-Performance-Tips?msg=5003414#xx5003414xx
他们为不受控制的行动编写此代码
protected override void HandleUnknownAction(string actionName)
{
RedirectToAction("Index").ExecuteResult(this.ControllerContext);
}
作者说如果用户请求http://localhost:58234/default/index1, index1 action which does not exist so it will redirect to the default/index
我想开发一个基本控制器,并为请求url放置一个检测动作方法或控制器的例程。如果不存在则会将用户重定向到具有查询字符串值的特定控制器的操作方法。因此,我们可以向用户显示友好的信息。
我仍然没有机会在办公室与mvc合作。出于好奇,我想知道如何使用base controller
实现功能?
帮我提供示例代码。感谢
答案 0 :(得分:6)
您可以按如下方式创建基类
public class BaseController : Controller
{
protected override void HandleUnknownAction(string actionName)
{
//Your code
RedirectToAction("Index").ExecuteResult(this.ControllerContext);
}
}
并且您的所有控制器都应该继承BaseController
而不是Controller
。
<强>用例强>
YOURDOMAIN.COM\CorrectController\InCorrectActionMethod // `HandleUnknownAction` will be called
YOURDOMAIN.COM\InCorrectController\InCorrectActionMethod // `HandleUnknownAction` will be not be called, in this case 404 will be thrown.
答案 1 :(得分:1)
为什么你需要这样做。
就这样做。
管理Application_Error
事件表单Global.asax
文件。
protected void Application_Error(Object sender, EventArgs e)
{
//process 404 HTTP errors
var httpException = exception as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
Response.Clear();
Server.ClearError();
Response.TrySkipIisCustomErrors = true;
// Call target Controller and pass the routeData.
IController errorController = "Your Controller";
var routeData = new RouteData();
routeData.Values.Add("controller", "Common");
routeData.Values.Add("action", "PageNotFound");
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
}
希望得到这个帮助。