これがばかげた質問である場合はお詫びしますが、 asp.netmvc3のモデルでエラーが発生したときにエラーページにリダイレクトするための最善の方法を考えています。
つまり、すべてのコントローラーが継承するapplicationControllerがあり、「OnActionExecuting」関数で、ユーザーがInternetExplorerを使用しているかどうかを確認します。
もしそうなら、私は自分のエラーモデルで関数を呼び出します(データベースにエラーを記録したいのでこれを持っています)。それからユーザーをエラーページにリダイレクトして、chromeをダウンロードするように指示します。
ApplicationController
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");
}
}
}
ErrorModel
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
}
}
この特定の例では、モデルでエラーが実際に発生していないことを知っているので、コントローラーからリダイレクトするだけで済みます。ただし、ログに記録して、可能であればリダイレクトする1つの関数を呼び出せるようにしたいと思います。これは、発生する可能性のある他の多くのエラーに必要になるためです。
私はこれを完全に間違った方法で行っている可能性があります。その場合、私はもちろん変更を受け入れることができます。助けてくれてありがとう!