मुझे अपने साझा होस्ट पर तैनात एएसपी.नेट एमवीसी ऐप पर कस्टम त्रुटियों के साथ कोई समस्या है। मैंने एक त्रुटि नियंत्रक बनाया है और अनचाहे अपवादों को पकड़ने के लिए Global.asax पर निम्न कोड जोड़ा है, उन्हें लॉग इन करें, और फिर कस्टम त्रुटियों को प्रदर्शित करने के लिए त्रुटि नियंत्रक को नियंत्रण स्थानांतरित करें। इस कोड को here से लिया जाता है:एएसपी.नेट एमवीसी ऐप कस्टम त्रुटि पेज साझा होस्टिंग पर्यावरण में प्रदर्शित नहीं हो रहे हैं
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
Response.Clear();
HttpException httpEx = ex as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpEx == null)
{
routeData.Values.Add("action", "Index");
}
else
{
switch (httpEx.GetHttpCode())
{
case 404:
routeData.Values.Add("action", "HttpError404");
break;
case 500:
routeData.Values.Add("action", "HttpError500");
break;
case 503:
routeData.Values.Add("action", "HttpError503");
break;
default:
routeData.Values.Add("action", "Index");
break;
}
}
ExceptionLogger.LogException(ex); // <- This is working. Errors get logged
routeData.Values.Add("error", ex);
Server.ClearError();
IController controller = new ErrorController();
// The next line doesn't seem to be working
controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
Application_Error निश्चित रूप से फायरिंग कर रहा है क्योंकि प्रवेश ठीक काम करता है, लेकिन इसके बजाय अपने कस्टम त्रुटि पृष्ठों को प्रदर्शित करने में, मैं गो डैडी सामान्य लोगों को मिलता है। ब्लॉग पोस्ट के शीर्षक से उपरोक्त कोड लिया गया है, मुझे लगता है कि यह एमवीसी ढांचे के रिलीज उम्मीदवार 2 का उपयोग करता है। क्या 1.0 में कुछ बदलाव आया जो कोड की आखिरी पंक्ति काम नहीं करता है? सामान्य रूप से यह works great on my machine है।
किसी भी सुझाव की सराहना की जाएगी।
संपादित करें: यह उल्लेख करना भूल गया कि मैंने Web.config (ऑफ, ऑन, और रिमोटऑनली) में customErrors मोड के लिए सभी 3 possiblities की कोशिश की है। इस सेटिंग के बावजूद वही परिणाम।
संपादित 2: और मैंने नियंत्रक कक्षाओं पर [हैंडलरर] सजावट के साथ और उसके बिना भी कोशिश की है।
अपडेट: मैंने पता लगाया है और 404s तय कर दिया है। गो डैडी के होस्टिंग कंट्रोल सेंटर में सेटिंग्स पैनल का एक अनुभाग है जहां 404 व्यवहार नियंत्रित किया जा सकता है और डिफ़ॉल्ट उनके सामान्य पृष्ठ को दिखाना है, और स्पष्ट रूप से यह किसी भी Web.config सेटिंग्स को ओवरराइड करता है। तो मेरा कस्टम 404 पेज अब इरादे के रूप में दिखा रहा है। हालांकि, 500 और 503 अभी भी काम नहीं कर रहे हैं।
public static HomeContent GetStaticContent()
{
HomeContent hc;
try
{
string path = Configuration.CcmConfigSection.Config.Content.PathToStaticContent;
string fileText = File.ReadAllText(path);
string regex = @"^[^#]([^\r\n]*)";
MatchCollection matches = Regex.Matches(fileText, regex, RegexOptions.Multiline);
hc = new HomeContent
{
ID = Convert.ToInt32(matches[0].Value),
Title = matches[1].Value,
DateAdded = DateTime.Parse(matches[2].Value),
Body = matches[3].Value,
IsCurrent = true
};
}
catch (Exception ex)
{
try
{
ExceptionLogger.LogException(ex);
}
catch
{
// couldn't log exception, continue without crashing
}
hc = null;
}
return hc;
}
:
public ActionResult Index()
{
CcmDataClassesDataContext dc = new CcmDataClassesDataContext();
// This might generate an exception which will be handled in the OnException override
HomeContent hc = dc.HomeContents.GetCurrentContent();
ViewData["bodyId"] = "home";
return View(hc);
}
protected override void OnException(ExceptionContext filterContext)
{
// Only concerned here with SqlExceptions so an HTTP 503 message can
// be displayed in the Home View. All others will bubble up to the
// Global.asax.cs and be handled/logged there.
System.Data.SqlClient.SqlException sqlEx =
filterContext.Exception as System.Data.SqlClient.SqlException;
if (sqlEx != null)
{
try
{
ExceptionLogger.LogException(sqlEx);
}
catch
{
// couldn't log exception, continue without crashing
}
ViewData["bodyId"] = "home";
filterContext.ExceptionHandled = true;
HomeContent hc = ContentHelper.GetStaticContent();
if (hc == null)
{
// Couldn't get static content. Display friendly message on Home View.
Response.StatusCode = 503;
this.View("ContentError").ExecuteResult(this.ControllerContext);
}
else
{
// Pass the static content to the regular Home View
this.View("Index", hc).ExecuteResult(this.ControllerContext);
}
}
}
यहाँ कोड है कि स्थिर सामग्री लाने के लिए प्रयास करता है: मैं इस प्रकार की सामग्री के एक स्थिर पाठ संस्करण हड़पने के लिए करता है, तो Sql सर्वर एक अपवाद फेंकता HomeController में कोड मिल गया है
मैंने सत्यापित किया है कि यदि मैं SqlException उत्पन्न करने के लिए कनेक्शन स्ट्रिंग को बदलता हूं, तो कोड त्रुटि को ठीक से लॉग करता है और फिर स्थिर सामग्री को पकड़ता है और प्रदर्शित करता है। लेकिन अगर मैं होम व्यू के 503 संस्करण का परीक्षण करने के लिए Web.config में स्थैतिक टेक्स्ट फ़ाइल में पथ भी बदलता हूं, तो इसके बजाय मुझे "सेवा अनुपलब्ध" के अलावा कुछ भी नहीं है। बस। साइट के स्वरूप और अनुभव के साथ कोई कस्टम 503 संदेश नहीं।
क्या किसी के पास कोड में सुधार के बारे में कोई सुझाव है जो मदद कर सकता है? क्या यह विभिन्न शीर्षलेखों को HttpResponse में जोड़ने में मदद करेगा? या गो डैडी 503 के दशक को भारी हद तक अपहरण कर रहा है?
+1 धन्यवाद, ब्रायन। खोज के 2+ घंटों के बाद आपने मुझे जवाब दिया जो मुझे चाहिए। यह बहुत आसान हैं। मैं एक 404 त्रुटि कोड सेट करने की कोशिश कर रहा था जो मुझे एक सुरक्षा अपवाद दे रहा था और "Response.TrySkipIisCustomErrors = true;" ठीक कर दिया। –
यह मुझे पागल बनाने के लिए चला रहा था। बहुत बहुत धन्यवाद। "Response.TrySkipIisCustomErrors = true;" मेरे त्रुटि नियंत्रक में प्रतिक्रिया कोड सेट करने के तुरंत बाद मेरे लिए क्या काम किया गया है। यह भ्रामक था क्योंकि मेरा स्थानीय आईआईएस 7 उदाहरण मेरे कस्टम त्रुटि दृश्यों को प्रस्तुत कर रहा था, लेकिन रिमोट स्टेजिंग सर्वर नहीं था। = पी – NovaJoe
मैं इस उत्तर में जो प्रदान किया गया है उसे लागू करने के बाद मैं उसी नाव में था: http://stackoverflow.com/a/7499406/114029। 'Response.TrySkipIisCustomErrors = सत्य;' स्वर्ग से आता है! :) –