如何将用户重定向到特定控制器asp.net mvc的动作方法

时间:2015-02-17 07:36:33

标签: asp.net-mvc

我正在阅读关于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实现功能?

帮我提供示例代码。感谢

2 个答案:

答案 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));

        }
    }

希望得到这个帮助。