দ্রুত উত্তর / টিএল; ডিআর
অলস লোকদের জন্য সেখানে:
Install-Package MagicalUnicornMvcErrorToolkit -Version 1.0
তারপরে এই লাইনটি সরান global.asax
GlobalFilters.Filters.Add(new HandleErrorAttribute());
এবং এটি কেবল আইআইএস 7 + এবং আইআইএস এক্সপ্রেসের জন্য।
আপনি যদি ক্যাসিনি ব্যবহার করেন .. ভাল .. উম .. এর .. বিশ্রী ...
দীর্ঘ, ব্যাখ্যা উত্তর
আমি জানি এই উত্তর দেওয়া হয়েছে। তবে উত্তরটি হ'ল সত্যই সরল ( ডেভিড ফোলার এবং ড্যামিয়ান এডওয়ার্ডসকে উত্সাহিত) সত্যই )।
নেই কিছু কাস্টম করতে কোন প্রয়োজন ।
জন্য ASP.NET MVC3
, সমস্ত বিট এবং টুকরা আছে।
পদক্ষেপ 1 -> আপনার ওয়েবকনফিগটি টিডব্লিউও স্পটে আপডেট করুন।
<system.web>
<customErrors mode="On" defaultRedirect="/ServerError">
<error statusCode="404" redirect="/NotFound" />
</customErrors>
এবং
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/NotFound" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/ServerError" responseMode="ExecuteURL" />
</httpErrors>
...
<system.webServer>
...
</system.web>
আমি যে রুটগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছি সে সম্পর্কে এখন সাবধান নোট করুন। আপনি কিছু ব্যবহার করতে পারেন, তবে আমার রুটগুলি
/NotFound
<- একটি 404 পাওয়া যায় নি, ত্রুটি পৃষ্ঠা।
/ServerError
<- অন্য কোনও ত্রুটির জন্য, আমার কোডে ঘটে যাওয়া ত্রুটিগুলি অন্তর্ভুক্ত করুন। এটি একটি 500 অভ্যন্তরীণ সার্ভার ত্রুটি
<system.web>
কেবলমাত্র প্রথম বিভাগে কীভাবে একটি কাস্টম প্রবেশ রয়েছে? statusCode="404"
এন্ট্রি? আমি কেবলমাত্র একটি স্থিতি কোডটি তালিকাভুক্ত করেছি কারণ 500 Server Error
( অন্যান্য errors ত্রুটিযুক্ত ত্রুটি ঘটবে যখন আপনার কোডটিতে কোনও বাগ থাকে এবং ব্যবহারকারীর অনুরোধ ক্র্যাশ হয়ে যায়) .. অন্যান্য সমস্ত ত্রুটিগুলি সেটিংস দ্বারা পরিচালিত হয় defaultRedirect="/ServerError"
.. যা বলে , যদি আপনি 404 পৃষ্ঠা না পাওয়া যায় তবে দয়া করে এই পথে যান/ServerError
।
ঠিক আছে. যে উপায় বাইরে .. এখন তালিকাভুক্ত আমার রুটglobal.asax
পদক্ষেপ 2 - গ্লোবাল.এক্সএক্সে রুট তৈরি করা
এখানে আমার সম্পূর্ণ রুট বিভাগটি ..
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new {favicon = @"(.*/)?favicon.ico(/.*)?"});
routes.MapRoute(
"Error - 404",
"NotFound",
new { controller = "Error", action = "NotFound" }
);
routes.MapRoute(
"Error - 500",
"ServerError",
new { controller = "Error", action = "ServerError"}
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
}
এতে দুটি উপেক্ষা করা রুট তালিকাভুক্ত করা হয় -> axd's
এবং favicons
(ওও! বোনাস উপেক্ষা করার পথটি আপনার জন্য!) তারপরে (এবং অর্ডারটি এখানে চূড়ান্ত), আমার দুটি স্পষ্ট ত্রুটি পরিচালনা করার রুট রয়েছে ... তারপরে অন্য কোনও রুট রয়েছে। এই ক্ষেত্রে, ডিফল্ট এক। অবশ্যই, আমার আরও আছে, তবে এটি আমার ওয়েব সাইটের কাছে বিশেষ। কেবল ত্রুটি রুটগুলি তালিকার শীর্ষে রয়েছে তা নিশ্চিত করুন। আদেশ জরুরী ।
শেষ পর্যন্ত, আমরা আমাদের global.asax
ফাইলে থাকা অবস্থায়, আমরা বিশ্বব্যাপী হ্যান্ডলিরর বৈশিষ্ট্যটি নিবন্ধন করি না। না, না, না স্যার। Nadda। নাঃ। Nien। নেতিবাচক. Noooooooooo ...
এই লাইনটি সরিয়ে দিন global.asax
GlobalFilters.Filters.Add(new HandleErrorAttribute());
পদক্ষেপ 3 - ক্রিয়া পদ্ধতিগুলির সাথে নিয়ামক তৈরি করুন
এখন .. আমরা দুটি ক্রিয়া পদ্ধতি সহ একটি নিয়ামক যুক্ত করি ...
public class ErrorController : Controller
{
public ActionResult NotFound()
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View();
}
public ActionResult ServerError()
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
// Todo: Pass the exception into the view model, which you can make.
// That's an exercise, dear reader, for -you-.
// In case u want to pass it to the view, if you're admin, etc.
// if (User.IsAdmin) // <-- I just made that up :) U get the idea...
// {
// var exception = Server.GetLastError();
// // etc..
// }
return View();
}
// Shhh .. secret test method .. ooOOooOooOOOooohhhhhhhh
public ActionResult ThrowError()
{
throw new NotImplementedException("Pew ^ Pew");
}
}
ঠিক আছে, এটি পরীক্ষা করে দেখা যাক। প্রথমত, এখানে কোনও [HandleError]
গুণাবলী নেই। কেন? কারণ বিল্ট ইনASP.NET
কাঠামোটি ইতিমধ্যে ত্রুটিগুলি পরিচালনা করছে এবং আমরা ত্রুটিটি পরিচালনা করার জন্য প্রয়োজনীয় সমস্ত বিষ্ঠা নির্দিষ্ট করে দিয়েছি :) এটি এই পদ্ধতিতে!
এর পরে, আমার কাছে দুটি ক্রিয়া পদ্ধতি রয়েছে। শক্ত কিছু নেই। আপনি যদি কোনও ব্যতিক্রম তথ্য দেখাতে চান তবে আপনি Server.GetLastError()
সেই তথ্যটি ব্যবহার করতে পারেন ।
বোনাস ডাব্লুটিএফ: হ্যাঁ, ত্রুটি পরিচালনা পরিচালনা করার জন্য আমি তৃতীয় ক্রিয়া পদ্ধতি তৈরি করেছি।
পদক্ষেপ 4 - দেখুন তৈরি করুন
এবং অবশেষে, দুটি মতামত তৈরি করুন। এই নিয়ামকটির জন্য এটিকে সাধারণ দর্শনীয় স্থানে রাখুন।
বোনাস মন্তব্য
- আপনার দরকার নেই
Application_Error(object sender, EventArgs e)
- উপরের পদক্ষেপগুলি সমস্ত এলার্মের সাথে 100% নিখুঁতভাবে কাজ করে । এলমাকে ভ্রূজ বানানো!
এবং এটি, আমার বন্ধুরা, এটি হওয়া উচিত।
এখন, এগুলি পড়ার জন্য অভিনন্দন এবং একটি ইউনিকর্ন একটি পুরষ্কার হিসাবে রয়েছে!