2016-09-25 4 views
0

J'ai créé le Application_Error page dans Global.asaxC# MVC Application_Error Redirect Page Not Html (Il semble être la chaîne.)

Je prends erreur. Et je redirige.

Redirect URL = xxxxx.com/Error/E404

mais montre le code source de la page.

enter image description here

contenu ErrorController;

public class ErrorController : Controller 
{ 
    // GET: Error 
    public ActionResult E404() 
    { 
     var res = HttpContext.Response; 
     return View(); 
    } 
} 

Contenu global.asax;

protected void Application_Error() 
    { 
     var exception = Server.GetLastError(); 
     var httpException = exception as HttpException; 
     var request = Request; 
     Response.Clear(); 
     Server.ClearError(); 
     Response.TrySkipIisCustomErrors = true; 
     var routeData = new RouteData(); 
     routeData.Values["controller"] = "Error"; 
     routeData.Values["action"] = "Index"; 
     routeData.Values["exception"] = exception; 
     Response.StatusCode = 500; 

     if (httpException != null) 
     { 
      Response.StatusCode = httpException.GetHttpCode(); 

      switch (Response.StatusCode) 
      { 
       case 403: 
        routeData.Values["action"] = "E403"; 
        break; 
       case 500: 
        routeData.Values["action"] = "E500"; 
        break; 
       case 404: 
        routeData.Values["action"] = "E404"; 
        break; 
       default: 
        routeData.Values["action"] = "General"; 
        break; 
      } 

      // -- Save Log + 
      string Url = request.Url.OriginalString; 
      string Query = request.Url.Query; 
      string ReferrerUrl = request.UrlReferrer == null ? null : request.UrlReferrer.ToString(); 
      string Browser = request.Browser.Browser; 
      string UserAgent = request.UserAgent; 
      string IpAddress = request.UserHostAddress; 
      string iPv6Address = ""; 
      bool IsMobileDevice = request.Browser.IsMobileDevice; 

      ActionLogger.Log_ApplicationError(Response.Status, 
       Response.StatusCode.ToString(), 
       Response.StatusDescription, 
       exception.HResult.ToString(), 
       exception.HelpLink, 
       exception.TargetSite.ToString(), 
       exception.Source, 
       exception.StackTrace, 
       Url, 
       Query, 
       DateTime.Now, 
       exception.Message, 
       IpAddress, 
       iPv6Address, 
       ReferrerUrl, 
       Browser, 
       UserAgent, 
       IsMobileDevice); 
      // -- Save Log 
     } 
     IController errorsController = new Controllers.ErrorController(); 
     var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
     errorsController.Execute(rc); 
    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     GlobalConfiguration.Configuration.EnsureInitialized(); 

     RegisterViewEngine(ViewEngines.Engines); 

ThemeApplicationBuild.RegisterApplication (this);

}

...

+0

Qu'est-ce que les en-têtes de réponse HTTP ne voyez-vous sur le client? – SLaks

+0

texte ContentType/html Voir Application_Error: http://i.hizliresim.com/ZYz9mZ.png Voir ErrorController: http://i.hizliresim.com/J3zQPQ.png –

Répondre

0

je résolu le problème.

Application_Error set ContentType = "text/html"

 HttpContext.Current.Response.ContentType = "text/html"; 

     IController errorsController = new Controllers.ErrorController(); 
     var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
     errorsController.Execute(rc);