如何捕获引发异常的页面的URL

时间:2012-11-20 15:31:02

标签: c# asp.net-mvc

使用

抓取当前网址非常简单
HttpContext.Current.Request.Url.ToString();

事实上,这是this very similar question.的公认答案 但是,我已经实现了应用程序范围的错误处理,并且有一个ErrorController可以生成在有未处理的异常时发送给我们的电子邮件。如果我在错误控制器中实现上面的代码片段,我得到的URL就像

http://.../Error/GenericError?aspxerrorpath=/Controller/ErrorProneAction

如何获取实际引发错误的网页的网址?也就是说,更像是

http://.../Controller/ErrorProneAction

2 个答案:

答案 0 :(得分:1)

请参阅此博文:

http://blog.gauffin.org/2011/11/how-to-handle-errors-in-asp-net-mvc/

如果您将参数传递给ActionResult,则会获取aspxerrorpath查询字符串值的值。

public ActionResult NotFound(string url)
{
  var originalUri = url ?? Request.QueryString["aspxerrorpath"] ?? Request.Url.OriginalString;
}

答案 1 :(得分:1)

根据你的评论 - 你的global.asax中有void Application_OnError(object sender, EventArgs e)这样的函数吗?如果是这样,那么您应该能够获得您正在寻找的信息。

protected void Application_OnError(object sender, EventArgs e)
{
    var app = (MvcApplication)sender;
    var context = app.Context;
    string path = context.Request.PathWithQueryString;
    ...

给你/controllerOrRoute/action?query=val之类的东西。或者你可以使用RawUrl或Url属性来获得基本相同的东西。我刚刚解雇了我的应用程序以查看它生成的内容,看起来这就是你要求的内容。

编辑:我应该注意到我测试了上面的MVC3。