【问题标题】:Avoid handle 404 on other requests than main避免在除主请求之外的其他请求上处理 404
【发布时间】:2012-10-08 22:22:34
【问题描述】:

我在global asaxEndRequest 方法中使用了下面的方法。即使来自图像请求或其他请求,我也会得到HTTP 404 error。关键是我只想检查第一个请求/主要请求。你能帮我吗。这是唯一有效的解决方案。

{
    if (Context.Response.StatusCode == 404)
    {
        Response.Clear();

        var rd = new RouteData();
        rd.DataTokens["area"] = "AreaName"; 
        rd.Values["controller"] = "Errors";
        rd.Values["action"] = "NotFound";

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

【问题讨论】:

  • “主要”是什么意思?您是否只对为控制器操作处理 404 感兴趣?
  • 假设您向microsoft.comand 发出请求,如果您锁定了萤火虫,您将看到服务器对图像和其他内容的其他请求
  • 把你的错误放在这里。 (堆栈跟踪)
  • 不是堆栈树的错误,这里的重点是您收到了 404 请求。这个请求可以来自 mysite.com/blabla stackoverflow.com/questions/717628/… 关于 Marco (35 up) 的回答

标签: c# http-status-code-404 httprequest global-asax


【解决方案1】:

假设您只想为控制器操作处理 404,您可以检查当前请求是否是这样的:

if(!string.IsNullOrEmpty(Request.RequestContext.RouteData.GetRequiredString("controller")))
{
  ...handling code goes here....
}

【讨论】:

  • 我真的不应该强迫他进入一个特定的控制器并基于名称(一些 url 在数据库中被称为 rots 重定向)所以我不能接受这个选项。在那里,未知链接可以是从网站到其他页面的重定向页面,但在我到达 404 的指定控制器之前,我无法在它们之间做出区别。但我不会通过其他请求(如图像请求)进入那里。
  • 那么你需要对 Url 使用正则表达式或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多