2010-08-31 82 views
0

IIS 7.5 MVC 2.0 ASP.NET 4.0MVC 2.0路线,重定向请求,请求忽略

如果我的MVC网站获得任何不存在文件的外部请求,例如SomePage.aspx页面有重定向这样的请求,任何方式任何控制器/动作。

我正在使用elmah,并且在出现这种请求时抛出错误。

另外我也加routes.IgnoreRoute("SomePage.aspx") in global.asax.cs忽略这个请求相同,因为我添加了忽略favicon.ico,但对于SomaPage.aspx它是行不通的,elmah无论如何抛出错误。

因此,有三个问题/解决方案,我会很高兴得到答案:

1)如何重定向这个请求,存在控制器/动作

2)如何忽略这类请求

3)如何关闭IIS 7.5上的“验证文件是否存在”

回答

0

您可以让Elmah过滤掉某些类型的异常。设置它忽略404错误是一个相当普遍的做法:

http://code.google.com/p/elmah/wiki/ErrorFiltering

提取物:

<section name="errorFilter" type="Elmah.ErrorFilterSectionHandler, Elmah" requirePermission="false" /> 

... 

<elmah> 
    <errorFilter> 
     <test> 
      <equal binding="HttpStatusCode" value="404" type="Int32" /> 
     </test> 
    </errorFilter> 
</elmah> 
1

可以呀,,,我有一个错误控制器来亨德尔不同的错误。

在您的web.config中,添加以下内容以启用customErrors模式,并在发生任何错误时将其设置为重定向到您的控制器。

<system.web> 
    <customErrors mode="On" defaultRedirect="/error/problem"> 
     <error statusCode="404" redirect="/error/notfound" /> 
     <error statusCode="500" redirect="/error/problem" /> 
    </customErrors> 
</system.web> 

,如果你想更具体的您可以添加更多的错误类型上面,没有列出任何错误都将回落到默认的重定向。

这是我的错误控制器:

public class ErrorController : Controller 
{ 

    public ActionResult NotFound() 
    { 
     ErrorViewModel model = BaseViewModelBuilder.CreateViewModel<ErrorViewModel>("We couldn't find what you were looking for"); 

     // Get the URL that caused the 404 error. 
     model.ErrorUrl = Request.UrlReferrer; 

     // Set the response status code to 404 
     Response.StatusCode = (int)HttpStatusCode.NotFound; 
     Response.TrySkipIisCustomErrors = true; 

     return View(model); 
    } 

    public ActionResult Problem() 
    { 
     ErrorViewModel model = BaseViewModelBuilder.CreateViewModel<ErrorViewModel>("Well this is embarrassing..."); 

     return View(model); 
    } 

} 

和您可能已经猜到我在错误视图文件夹中的Error.aspx,Problem.aspx意见。