【问题标题】:How to create controller object and execute action with parameter from global.asax如何使用 global.asax 中的参数创建控制器对象并执行操作
【发布时间】:2017-05-19 01:42:19
【问题描述】:

我在global.asax有这个代码

 protected void Application_Error(object sender, EventArgs e)
        {
            // ...
            var routeData = new RouteData();
            routeData.Values.Add("controller", "Home");
            routeData.Values.Add("action", "Error");

            IController controller = new Controllers.HomeController();
            controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));

        }

如何向 Action 方法/RouteData 添加参数?我想向用户显示异常消息。

【问题讨论】:

  • 为什么要在出错时调用控制器方法,而不是从应用程序错误中调用服务或业务逻辑?
  • 你的意思是直接从global.asax处理错误并返回一个视图吗?
  • 您到底想对应用程序错误块做什么,想要记录错误或进行数据库调用以记录错误?
  • 我已经在Application_Error 中将错误记录到数据库中,但我想向用户显示一个错误页面,其中包含错误的基本描述。

标签: asp.net-mvc error-handling global-asax


【解决方案1】:

我已经弄明白了,

routeData.Values.Add("message", exception.Message);

并且在行动中只捕获那个参数

public ActionResult Index(string message)

【讨论】:

    【解决方案2】:

    要显示自定义错误页面,您需要更改 web.config。

    <system.web> <customErrors mode="On" defaultRedirect="~/Error"> <error redirect="~/Error/NotFound" statusCode="404" /> </customErrors> </system.web>

    您可以为不同的状态码创建错误页面。

    确保您有控制器和操作方法来返回视图。

    在 Application_error MVC 之后,它自己将重定向到 web.config 中描述的同一页面。

    更多信息请参考link

    【讨论】:

    • 这种情况下,如何访问action中的error异常?
    • 异常将在 Application_error 级别访问,.net 将重定向到配置文件中描述的操作。该操作应该只返回视图
    • 但是如何在视图中显示错误描述(异常信息)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多