如何仅通过mvc应用程序调用操作,而不是通过直接URL请求

时间:2014-01-10 10:26:18

标签: asp.net-mvc-4 http-status-code-404 asp.net-mvc-routing global-asax

在我的mvc应用程序中,我通过检查global.asax.cs中的Application_EndRequest()方法中的响应代码并返回自定义404 /错误页面来处理404和505错误,如下所示

protected void Application_EndRequest()
    {
            if (Context.Response.StatusCode == 404)
            {
                Response.Clear();
                var rd = new RouteData();
                rd.Values["controller"] = "Errors";
                rd.Values["action"] = "PageNotFound";

                IController c = new ErrorsController();
                c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
            }

            else if (Context.Response.StatusCode == 500)
            {
                Response.Clear();
                var rd = new RouteData();
                rd.Values["controller"] = "Errors";
                rd.Values["action"] = "ServerError";

                IController c = new ErrorsController();
                c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
            }
        }
    }

我有如下面的错误控制器

public ActionResult PageNotFound()
    {
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        return View();
    }

    public ActionResult ServerError()
    {
        Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        return View("Error");
    }

现在,当我在http://mydomain/errors/servererror地址栏中输入网址时,会显示我当前的自定义错误页面

所以我想通过访问此页面来阻止用户,那么我该如何实现呢?

P.S。 到目前为止,我已经尝试通过配置名为“Errors / ServerError”的路由并将其重定向到其他地方来解决这个问题,但我认为可能还有另一种好方法..

0 个答案:

没有答案