2014-12-16 10 views
6

मेरे web.config झटका में आप redirectMode = "ResponseRewrite" देख सकते हैं। मैंने पढ़ा है कि मुझे स्थिति कोड को संरक्षित करने की आवश्यकता है। दुर्भाग्यवश जैसे ही मेरे पास है, मुझे मिलता है:आप कस्टम त्रुटियों का उपयोग कैसे करते हैं और प्रतिक्रिया कोड को संरक्षित करते हैं?

"आपके अनुरोध को संसाधित करते समय एक अपवाद हुआ। इसके अतिरिक्त, पहले अपवाद के लिए कस्टम त्रुटि पृष्ठ निष्पादित करते समय एक और अपवाद हुआ। अनुरोध समाप्त कर दिया गया है।"

इस चर को निरस्त करना मुझे सफलतापूर्वक ~/error/Index.cshtml पर रीडायरेक्ट करता है लेकिन 200 की प्रतिक्रिया है। किसी भी दिशा की सराहना की जाएगी, धन्यवाद।

<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/Index"> 
     <error statusCode="404" redirect="~/Error/Index"/> 
     <error statusCode="500" redirect="~/Error/Index"/> 
    </customErrors> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL"> 
     <remove statusCode="403"/> 
     <remove statusCode="404"/> 
     <remove statusCode="500"/> 
     <error statusCode="403" path="~/Error/Index" responseMode="File"/> 
     <error statusCode="404" path="~/Error/Index" responseMode="File"/> 
     <error statusCode="500" path="~/Error/Index" responseMode="File"/> 
    </httpErrors> 
    </system.webServer> 

मेरी filterconfig.cs में:

public class FilterConfig 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      // does this conflict? 
      filters.Add(new HandleErrorAttribute()); 
     } 
    } 

उत्तर

1

जहाँ मैं इस कोड को देखा था, या मैं क्या बदल याद नहीं आ रहा, लेकिन यह मेरी MVC वेब अनुप्रयोग में ठीक काम करता है

Web.config

<system.web> 
    <compilation debug="true" targetFramework="4.5.1" /> 
    <httpRuntime targetFramework="4.5.1" /> 
    <customErrors mode="Off" /> 
    </system.web> 

Global.aspx

protected void Application_EndRequest(Object sender, EventArgs e) 
     { 
      ErrorConfig.Handle(Context); 
     } 

ErrorConfig.cs

namespace Web.UI.Models.Errors 
{ 
    public static class ErrorConfig 
    { 
     public static void Handle(HttpContext context) 
     { 
      switch (context.Response.StatusCode) 
      { 
       case 401: 
        Show(context, 401); 
        break; 
       case 404: 
        Show(context, 404); 
        break; 
       case 500: 
        Show(context, 500); 
        break; 
      } 
     } 
     //TODO uncomment 500 error 
     static void Show(HttpContext context, Int32 code) 
     { 
      context.Response.Clear(); 

      var w = new HttpContextWrapper(context); 
      var c = new ErrorController() as IController; 
      var rd = new RouteData(); 

      rd.Values["controller"] = "Error"; 
      rd.Values["action"] = "Index"; 
      rd.Values["id"] = code.ToString(CultureInfo.InvariantCulture); 

      c.Execute(new RequestContext(w, rd)); 
     } 
    } 
} 

ErrorController

public class ErrorController : Controller 
    { 
     // GET: Error 
     [HttpGet] 
     public ViewResult Index(Int32? id) 
     { 
      var statusCode = id.HasValue ? id.Value : 500; 
      var error = new HandleErrorInfo(new Exception("An exception with error " + statusCode + " occurred!"), "Error", "Index"); 

      int errorCode = statusCode; 
      ViewBag.error = errorCode; 
      return View("Error"); 
     } 
    } 

ErrorsViewModel

namespace Web.UI.Models.Errors 
{ 
    public class ErrorViewModel 
    { 
     public string DisplayErrorMessage { get; set; } 
     public string DisplayErrorPageTitle { get; set; } 
    } 
} 

तब साझा फ़ोल्डर त्रुटि पृष्ठ में जोड़ने

@model Web.UI.Models.Errors.ErrorViewModel 

@{ 
    int errorCode = Convert.ToInt32(@ViewBag.error); 


    switch (errorCode) 
    { 
     case 404: 
      ViewBag.Title = "404 Page Not Found"; 
      Html.RenderPartial("~/Views/Shared/ErrorPages/HttpError404.cshtml"); 
      break; 
     case 500: 
      ViewBag.Title = "Error Occurred"; 
      Html.RenderPartial("~/Views/Shared/_Error.cshtml"); 
      break; 
     default: 
      ViewBag.Title = @Model.DisplayErrorPageTitle; 
      Html.RenderPartial("~/Views/Shared/ErrorPages/HttpNoResultsFound.cshtml"); 
      break; 
    } 
} 

उपरोक्त रिटर्न पृष्ठ के लिए 404 स्थिति नहीं मिली है और 500 त्रुटि के लिए, उम्मीद है कि यह

+0

अच्छा समाधान है, लेकिन इसका नकारात्मक पक्ष यह है कि आप विकास के दौरान विस्तृत त्रुटि संदेश प्राप्त नहीं कर पाएंगे। –

संबंधित मुद्दे