ASP.NET MVC 3 এ কাস্টম ত্রুটি পরিচালনার জন্য সুনির্দিষ্ট নির্দেশিকা কী?


44

এএসপি.নেট এমভিসিতে (এই ক্ষেত্রে 3) কাস্টম ত্রুটি পরিচালনা করার প্রক্রিয়াটি অবিশ্বাস্যভাবে অবহেলিত বলে মনে হচ্ছে। আমি এখানে বিভিন্ন প্রশ্ন এবং উত্তরগুলি ওয়েবে, বিভিন্ন সরঞ্জামের জন্য সহায়তা পৃষ্ঠাগুলিতে (এলমা হিসাবে) পড়েছি তবে আমার মনে হয় আমি একটি সম্পূর্ণ বৃত্তে চলে এসেছি এবং এখনও এর সর্বোত্তম সমাধান আমার কাছে নেই। আপনার সাহায্যে, সম্ভবত আমরা ত্রুটি পরিচালনার জন্য একটি নতুন স্ট্যান্ডার্ড পদ্ধতির সেট করতে পারি। আমি জিনিসগুলি সহজ রাখতে চাই এবং এটি অতিরিক্ত ইঞ্জিনিয়ার নয় not

আমার লক্ষ্যগুলি এখানে:

সার্ভার ত্রুটি / ব্যতিক্রমগুলির জন্য:

  1. ডিবেগে ডিবাগিংয়ের তথ্য প্রদর্শন করুন
  2. উত্পাদনে বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা প্রদর্শন করুন
  3. ত্রুটিগুলি লগ করুন এবং এটিকে উত্পাদনে প্রশাসককে ইমেল করুন
  4. 500 এইচটিটিপি স্থিতির কোডটি ফিরিয়ে দিন

404 এর জন্য ত্রুটিগুলি পাওয়া যায় নি:

  1. বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা প্রদর্শন করুন
  2. ত্রুটিগুলি লগ করুন এবং এটিকে উত্পাদনে প্রশাসককে ইমেল করুন
  3. 404 HTTP স্থিতি কোডটি ফিরিয়ে দিন Return

এএসপি.এনইটি এমভিসির সাথে এই লক্ষ্যগুলি পূরণ করার কোনও উপায় আছে কি?


2
আমি চাই এই প্রশ্নটি আবারও SO তে স্থানান্তরিত করা হোক যাতে এটি আরও উত্তর পেতে পারে। আমি কোডেড উত্তর খুঁজছি
শন ম্লেয়ান

পছন্দ করেছেন প্রশ্নটি এখানে SO এর চেয়ে বেশি বিষয় এবং এটির একটি স্বীকৃত উত্তর রয়েছে। প্রশ্নগুলি সাধারণত প্রযুক্তিগত কারণে পুনরায় স্থানান্তরিত হয় না। আপনার যদি কোনও নির্দিষ্ট ত্রুটি-পরিচালনা পদ্ধতির কোডিংয়ে সহায়তা প্রয়োজন হয় তবে দয়া করে স্ট্যাকওভারফ্লোতে একটি নতুন প্রশ্ন খুলুন। অন্যথায়, "কোডড উত্তরগুলি" কার্যকর বা জবাবদিহি করার জন্য খুব বিস্তৃত মানদণ্ড হতে পারে। সর্বশেষে তবে সর্বনিম্ন নয়, কোনও প্রশ্নের দিকে মডারেটরের দৃষ্টি আকর্ষণ করার সর্বোত্তম উপায় হ'ল এটি ফ্ল্যাগ করা। এখানে আপনার মন্তব্য সম্ভবত লক্ষ্য করা যায় না যদি এটি 20 টিরও বেশি মন্তব্য গণনা করে অটো-ফ্ল্যাগে ভ্রমণ না করে।
অ্যাডাম লিয়ার

এখানে প্রায় 10 টি মতামত ছিল, তারা সব কোথায় যাবে?
RyanW

আমি একটি সমাধান পেয়েছি যা আপনার লক্ষ্যগুলি পূরণ করে। এসও-তে এটি আমার উত্তর হিসাবে রয়েছে: স্ট্যাকওভারফ্লো.com
জেসি ওয়েব

1
@ আন্নলাআর আমি শনের সাথে একমত আমি এই পৃষ্ঠাটি গুগলের মাধ্যমেই পেয়েছি। নোট করুন যে নীচের প্রায় সমস্ত উত্তরগুলিতে স্ট্যাক ওভারফ্লোতে BACK এর লিঙ্ক রয়েছে। আমার কাছে যা খণ্ডের কথা বলে, এটি সেখানে প্রথমে রেখে দেওয়া উচিত ছিল।
রেবেকা

উত্তর:


23

আমি যেভাবে এটি শেষ করেছিলাম তা ভাগ করব, এটি ছিল মূল প্রশ্নের অংশ।

প্রথমত, আমি যে সমস্যার মুখোমুখি হয়েছিলাম:

  1. কাস্টম এরিআরসের সাথে (অর্থাত্ উত্পাদনে) গ্লোবাল HandleErrorঅ্যাট্রিবিউট ব্যতিক্রমগুলি গ্রাস করে এবং আপনার ত্রুটি দর্শনটিকে রেন্ডার করে, তবে তারপরে আপনি এটিকে এলামার মতো একটি অ্যাডন সরঞ্জাম দিয়ে লগ করতে পারবেন না, কারণ এলমা এটিকে কখনও দেখেন না। আমি মনে করি আপনি এটি আপনার ভিউতে লগ করতে পারেন, তবে এটি একটি দৃশ্য, এটি ভুল বলে মনে হচ্ছে। এমভিসি 3 আরটিএম ভিজ্যুয়াল স্টুডিও প্রকল্পের টেম্পলেটটিতে গ্লোবাল হ্যান্ডলিরর অ্যাট্রিবিউটটি নতুন প্রদর্শিত হবে।

  2. এমভিসি শেষপয়েন্টগুলির জন্য url সহ কাস্টমঅরারগুলি 302 স্থিতি কোড দেয় codes রিডাইরেক্টমোড বৈশিষ্ট্য রয়েছে, তবে আপনি কাস্টম এরিরসে এমভিসি ইউআরএলগুলির সাথে মেলে না এবং রেসপন্সরাইরাইট মোড ব্যবহার করতে পারেন। ( https://stackoverflow.com/questions/781861/customerferences-does-not-work-When-setting-redirectmode-responserewrite/3770265#3770265 )

  3. আপনার অ্যাপ্লিকেশনটিতে কাস্টমআরিয়ারগুলি সম্পূর্ণরূপে এড়ানো এবং কাস্টমকে সমস্ত কিছু পরিচালনা করা অনেক জটিলতার দিকে নিয়ে যায়, আইএমও। (এটি অবহিত: https://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc/2577095#2577095 , তবে এটি আমাদের প্রকল্পের জন্য সঠিক ছিল না)

আমার সমাধান

আমি এমভিসি পুরোপুরি সমীকরণ থেকে বের করে নিয়েছি। আমি HandleErrorAttributeগ্লোবাল.এক্সে গ্লোবাল ফিল্টার মুছে ফেলেছি এবং ResponseRewrite302 এইচটিটিপি প্রতিক্রিয়া কোডগুলি এড়ানোর জন্য ওয়েবফর্ম পুনর্নির্দেশগুলি ব্যবহার করার জন্য এটিকে স্থানান্তরিত করে এবং রিডাইরেক্টমোডে পরিবর্তিত করেছি, সম্পূর্ণরূপে কাস্টমরেজ কনফিগারেশনটিতে ফোকাস করেছি ।

<customErrors mode="On" defaultRedirect="/Error.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="/NotFound.aspx" />
</customErrors>

তারপরে, পেজ- NotFound.aspxলোড ইভেন্টে, Response.StatusCode404 এ সেট করুন এবং ত্রুটি-এএসপিএক্সে কোড 500 সেট করুন।

ফলাফল:

উভয়ের জন্য লক্ষ্যগুলি এলমাহ লগ, বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা এবং কোড-পিছনে এক লাইনের কোডের সাথে স্থিতি কোড দিয়ে অর্জন করা হয়েছে। আমরা পূর্বের সমাধান হিসাবে এটি "এমভিসি ওয়ে" করছি না, তবে কোডের দুটি লাইন থাকলে আমি এটির সাথে ঠিক আছি।


5

আমি মনে করি যে এমভিসি, এএসপি এবং আপনার প্রিয় লগিং / ব্যতিক্রম হ্যান্ডলিং কাঠামো আপনার লক্ষ্যগুলি বেশ সুন্দরভাবে পরিচালনা করতে পারে। ELMAH এবং এন্টারপ্রাইজ লাইব্রেরি উভয়ই ব্যতিক্রম হ্যান্ডলিং এবং লগিং যাতে আপনার পছন্দের চয়ন করতে ব্যবহার করতে সহজভাবে সরবরাহ করে I'm আমি এখানে প্রতিটিটির পক্ষে ভাল এবং কনসগুলিতে যাচ্ছি না।

দ্রষ্টব্য: আপনি একটি বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা প্রদর্শন করতে পারবেন না এবং আপনার প্রশ্নের পরামর্শ মতো একটি HTTP 404 বা 500 ফিরিয়ে দিতে পারবেন না। আপনি যখন বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠাটি ফিরিয়ে দেন তখন আপনার ব্রাউজারে ফিরে আসা HTTP কোডটি 302 হবে friendly এটি বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠায় পুনঃনির্দেশ।

বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা

দেখে মনে হচ্ছে আপনি কিছু সময়ের জন্য এএসপিএনটির অংশ থাকা ভাল 'ওল ফ্যাশনযুক্ত ওয়েবকনফিগ সেটিংস দ্বারা আপনার লক্ষ্যগুলি অর্জন করতে পারেন। আপনি যখন ডিবে থাকবেন তখন ডিবাগের তথ্য প্রদর্শন এবং উত্পাদনে বন্ধুত্বপূর্ণ পৃষ্ঠাগুলি দেখানোর কথা উল্লেখ করেন। আপনি এর জন্য ওয়েবকনফাইগের কাস্টম ত্রুটি বিভাগটি ব্যবহার করতে পারেন (ডিবাগের তথ্য দেখানোর জন্য কাস্টমআরফারস = "অফ" সেট করুন)। আমি ধরে নিতে চলেছি যে আপনি কাস্টমার্স বৈশিষ্ট্যের সাথে পরিচিত, এটি না পড়লে:

http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx

আপনি যদি কোন ত্রুটিটি প্রদর্শন করেন তার উপরে নিয়ন্ত্রণের বৃহত্তর প্রয়োজন হয় তবে এমভিসির হ্যান্ডলিরর অ্যাট্রিবিউট ব্যবহার করুন। এইভাবে আপনি প্রতিটি ক্রিয়া / নিয়ামকের জন্য পৃথক ত্রুটি দর্শন চয়ন করতে পারেন।

http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx

ব্যতিক্রম লগিং

দেখে মনে হচ্ছে আপনি একইভাবে আপনার সমস্ত ব্যতিক্রমকে প্রতিক্রিয়া জানাতে চান ('ত্রুটিগুলি লগ করুন এবং তাদের প্রযোজনায় প্রশাসকের কাছে ইমেল করুন')। যদি এটি হয় তবে আপনার সহজ বিকল্পটি হল কোড যুক্ত করা

অ্যাপ্লিকেশন_এরআর (অবজেক্ট প্রেরক, ইভেন্টআর্গস ই)

আপনার Global.asax এ ax আপনি এখানে আপনার নির্বাচিত লগিং ফ্রেমওয়ার্কটি পাস করতে পারেন।

আপনি যদি নিজের ব্যতিক্রম লগিং / হ্যান্ডলিংয়ের উপর আরও নিয়ন্ত্রণ চান তবে আপনি হ্যান্ডেলএরর অ্যাট্রিবিউট এবং ওভাররাইড সাবক্লাস করতে পারেন

OnException(System.Web.Mvc.ExceptionContext filterContext)

এটি অন্য একটি জায়গা যেখানে আপনি আপনার নির্বাচিত লগিং ফ্রেমওয়ার্কটিতে যেতে পারেন।

https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror

এটি আপনাকে উপরে উল্লিখিত অ্যাপ্লিকেশন_এরর কৌশলটির চেয়ে আরও নিয়ন্ত্রণ দেয়।

সাধারণভাবে এমভিসি আপনাকে কীভাবে ত্রুটিগুলি পরিচালনা করতে পারে তার নিয়ন্ত্রণের একটি দুর্দান্ত গ্রানুলারিটি দেয়। আপনার যদি এই নিয়ন্ত্রণের দরকার না হয় তবে আপনি নিজের ওয়েবকনফাইগটিতে ত্রুটি পৃষ্ঠাগুলি সংজ্ঞায়িত করার মতো কাজগুলি করার জন্য এএসপি.এন.টি.


আপনার চিন্তা যুক্ত করার জন্য অনেক ধন্যবাদ। আমি মনে করি যে 302 স্থিতি কোডটি মূল এএসপি.এনইটি টিম দ্বারা নকশা পছন্দ নয়। আমি আমার উত্তরগুলিতে এটিতেও প্রবেশ করব, এটি করার জন্য কিছু বিকল্প রয়েছে। মনে হচ্ছে এমভিসি বিশ্বের কিছু লোক কাস্টম এরিরগুলি পুরোপুরি ছেড়ে চলেছে এবং আপনি পুনরায় উল্লেখ করার সাথে সাথে আরও ভাল পুনরায় ব্যবহারযোগ্যতা এবং আরও নিয়ন্ত্রণের জন্য অ্যাপ্লিকেশনে এগুলি সমস্ত পরিচালনা করছেন। তবে, সেগুলি বাস্তবায়নে আমার সীমিত সাফল্য ছিল এবং প্রচুর কোড যুক্ত হয়েছিল যা দেখে মনে হয় এটি আরও ভাল বেকড ছিল। নীচে আমার উত্তর আরও।

আমি লগিংয়ের জন্য অনএক্সেপশন পদ্ধতিটি ওভাররাইড করতে পছন্দ করি, এইভাবে আমি জানি যে আমি সমস্ত কিছু লগ করতে পারি, এমনকী একটি এজ্যাক্স কল থেকে ত্রুটি ঘটেছে যা আমি খুঁজে পেয়েছি যা আপনার অ্যাপ্লিকেশন_রর ট্রিগার করবে না
অ্যালিসিয়া

@ অ্যালিসিয়া সম্পূর্ণ নমুনা কোড?
কিকিনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.