আপডেট করুন
যেহেতু এই উত্তরটি কোনও সমাধান সরবরাহ করে, তাই আমি এটিকে সম্পাদনা করব না, তবে আমি এই সমস্যাটি সমাধান করার একটি আরও পরিষ্কার উপায় খুঁজে পেয়েছি। বিশদ জন্য আমার অন্যান্য উত্তর দেখুন ...
আসল উত্তর: পদ্ধতিটি
কেন চাওয়া Application_Error()
হচ্ছে না তা আমি বুঝতে পেরেছি ...
Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute()); // this line is the culprit
}
...
}
ডিফল্টরূপে (যখন একটি নতুন প্রকল্প উত্পন্ন হয়), একটি এমভিসি অ্যাপ্লিকেশনটির Global.asax.cs
ফাইলে কিছু যুক্তি থাকে। এই যুক্তিটি রুট ম্যাপিং এবং ফিল্টার নিবন্ধকরণের জন্য ব্যবহৃত হয়। ডিফল্টরূপে, এটি কেবল একটি HandleErrorAttribute
ফিল্টার নিবন্ধ করে: একটি ফিল্টার। যখন কাস্টমআরআরগুলি চালু থাকে (বা এটি রিমোটঅনলিতে সেট করা থাকে তখন দূরবর্তী অনুরোধগুলির মাধ্যমে), হ্যান্ডেলএররআর্ট্রিবিউট এমভিসিকে ত্রুটি দেখার জন্য বলে এবং এটি কখনই Application_Error()
পদ্ধতিটিকে কল করে না । আমি এর ডকুমেন্টেশন খুঁজে পাইনি তবে এটি প্রোগ্রামার্স.স্ট্যাকেক্সেক্সঞ্জ ডটকম-এ এই উত্তরে ব্যাখ্যা করা আছে ।
প্রতিটি অযথিত ব্যতিক্রমের জন্য কল করা অ্যাপ্লিকেশন -এরর () পদ্ধতিটি পেতে , হ্যান্ডলিরর অ্যাট্রিবিউট ফিল্টারটি নিবন্ধিত করে এমন রেখা সরান।
এখন সমস্যাটি হ'ল: আপনি যা চান তা পেতে কীভাবে কাস্টমআরিয়ারগুলি কনফিগার করবেন ...
কাস্টমআরিয়ার্স বিভাগটি ডিফল্ট হয় redirectMode="ResponseRedirect"
। আপনি এমভিসি রুট হিসাবে ডিফল্টরাইডর্ট অ্যাট্রিবিউটও নির্দিষ্ট করতে পারবেন। আমি একটি ত্রুটি নিয়ন্ত্রণকারী তৈরি করেছি যা খুব সহজ ছিল এবং আমার ওয়েবকনফিগটিকে এটি দেখতে দেখতে ...
web.config
<customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="~/Error">
<error statusCode="404" redirect="~/Error/PageNotFound" />
</customErrors>
এই সমাধানটির সমস্যাটি হ'ল এটি 302 টি আপনার ত্রুটি URL এ পুনঃনির্দেশ করে এবং তারপরে সেই পৃষ্ঠাগুলি 200 টি স্ট্যাটাস কোড দিয়ে প্রতিক্রিয়া জানায়। এটি গুগল ত্রুটি পৃষ্ঠাগুলি সূচী বাড়ে যা খারাপ। এটি HTTP অনুমানের সাথে খুব সামঞ্জস্যপূর্ণ নয়। আমি যা করতে চেয়েছিলাম তা পুনর্নির্দেশ নয়, এবং আমার কাস্টম ত্রুটি দর্শনের সাথে মূল প্রতিক্রিয়াটি ওভাররাইট করে।
আমি চেঞ্জ করার চেষ্টা করেছি redirectMode="ResponseRewrite"
। দুর্ভাগ্যক্রমে, এই বিকল্পটি এমভিসি রুটগুলিকে সমর্থন করে না , কেবল স্থির এইচটিএমএল পৃষ্ঠাগুলি বা এএসপিএক্স। আমি প্রথমে একটি স্ট্যাটিক HTML পৃষ্ঠা ব্যবহার করার চেষ্টা করেছি তবে প্রতিক্রিয়া কোডটি এখনও 200 ছিল তবে কমপক্ষে এটি পুনর্নির্দেশ হয়নি didn't আমি তখন এই উত্তরটি থেকে একটি ধারণা পেয়েছি ...
আমি ত্রুটি পরিচালনার জন্য এমভিসি ত্যাগ করার সিদ্ধান্ত নিয়েছি। আমি একটি Error.aspx
এবং একটি তৈরি PageNotFound.aspx
। এই পৃষ্ঠাগুলি খুব সহজ ছিল তবে তাদের কাছে এক টুকরো ম্যাজিক ছিল ...
<script type="text/C#" runat="server">
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Response.StatusCode = (int) System.Net.HttpStatusCode.InternalServerError;
}
</script>
এই ব্লকটি পৃষ্ঠাটিকে সঠিক স্থিতি কোডের সাথে পরিবেশন করতে বলে। মোটামুটি, পেজনাটফাউন্ড.এএসপিএক্স পৃষ্ঠায়, আমি HttpStatusCode.NotFound
পরিবর্তে ব্যবহার করেছি । আমি এইভাবে দেখতে আমার ওয়েবকনফিগ পরিবর্তন করেছি ...
<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="~/Error.aspx">
<error statusCode="404" redirect="~/PageNotFound.aspx" />
</customErrors>
এটা সব নিখুঁতভাবে কাজ!
সারসংক্ষেপ:
- লাইনটি সরান:
filters.Add(new HandleErrorAttribute());
Application_Error()
ব্যতিক্রম লগ করতে পদ্ধতি ব্যবহার করুন
- এএসপিএক্স পৃষ্ঠাগুলি নির্দেশ করে, রেসপন্সরাইরাইটের সাথে কাস্টমআরারগুলি ব্যবহার করুন
- এএসপিএক্স পৃষ্ঠাগুলি তাদের নিজস্ব প্রতিক্রিয়া স্থিতি কোডগুলির জন্য দায়ী করুন
এই সমাধানটি নিয়ে আমি লক্ষ্য করেছিলাম একটি দম্পতি ডাউনসাইড।
- এএসপিএক্স পৃষ্ঠাগুলি রেজার টেম্পলেটগুলির সাথে কোনও মার্কআপ ভাগ করতে পারে না, ধারাবাহিক চেহারা এবং অনুভূতির জন্য আমাকে আমাদের ওয়েবসাইটের স্ট্যান্ডার্ড শিরোনাম এবং ফুটার মার্কআপটি পুনরায় লিখতে হয়েছিল।
- *। এসপিএক্স পৃষ্ঠাগুলি তাদের ইউআরএলগুলি হিট করে সরাসরি অ্যাক্সেস করা যায়
এই সমস্যাগুলির জন্য কাজের আশপাশ রয়েছে তবে তাদের দ্বারা কোনও অতিরিক্ত কাজ করার জন্য আমি যথেষ্ট উদ্বিগ্ন ছিলাম না।
আমি আশা করি এটি সবার সহায়তা করে!