0

抱歉,如果这是一个愚蠢的问题,但我只是想知道当asp.net mvc3中的模型发生错误时重定向到错误页面的最佳方法。

简而言之,我有一个所有控制器都继承的 applicationController,它在“OnActionExecuting”函数中检查用户是否正在使用 Internet Explorer。

如果是,我在我的错误模型中调用一个函数(我有这个函数是因为我想在数据库中记录错误),然后它应该将用户重定向到一个错误页面,告诉下载 chrome。

应用控制器

public class ApplicationController : Controller
{
    public string BASE_URL { get; set; }

    public ApplicationController() {}

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        BASE_URL = Url.Content("~/");

        ErrorModel err = new ErrorModel();

        String userAgent;
        userAgent = Request.UserAgent;
        if (userAgent.IndexOf("MSIE") > -1) {
            err.cause("browser", "redirect", "some other info");
        }        
    }
}

错误模型

public void cause(string _errCode, string strAction, string _otherInfo = "") {

        this.error_code = _errCode;
        this.error_otherInfo = _otherInfo;

        try {
            this.error_message = dctErrors[_errCode.ToLower()];
        } catch (KeyNotFoundException) {
            this.error_message = "Message not found.";
        }

        StackTrace sT = new StackTrace(true);
        String[] filePathParts = sT.GetFrame(1).GetFileName().Split('\\');

        this.error_filename = filePathParts.Last();
        this.error_lineNo = sT.GetFrame(1).GetFileLineNumber();

        this.error_function = sT.GetFrame(1).GetMethod().ReflectedType.FullName;

        this.error_date = DateTime.Now;
        this.error_uid = 0; //temporary

        if (strAction == "redirect") {
        //this is what I would like to do - but the "response" object does not 
        //exist in the context of the model
            Response.Redirect("Error/" + _errCode);                
        } else if (strAction == "inpage") {

        } else {
            //do nothing
        }
    }

我知道在这个特定的例子中,模型中实际上并没有发生错误,所以我可以从控制器重定向。但我希望能够调用一个函数,该函数将记录并在可能的情况下重定向,因为这对于可能发生的许多其他错误是必要的。

我可能会以完全错误的方式解决这个问题,在这种情况下,我当然愿意改变。谢谢您的帮助!

4

3 回答 3

1

我个人使用 MVC 框架提供的全局异常过滤器来写入错误日志。我还通过网络配置使用默认重定向到错误视图:

<customErrors mode="RemoteOnly" defaultRedirect="~/Error/">

当然,此模型可能存在缺点,但它涵盖了我迄今为止遇到的大多数异常。

于 2012-05-30T18:13:39.557 回答
1

您可以访问来自 HttpContext 的响应。

HttpContext.Current.Response
于 2012-05-30T18:14:07.927 回答
0

它非常简单,

您需要将结果(ActionResult)分配给 filterContext.Result

filterContext.Result = View("ErrorView", errorModel); 

或重定向

filterContext.Result = Redirect(url);

或者

filterContext.Result = RedirectToAction("actionname");  
于 2012-05-30T18:21:20.240 回答