কীভাবে কাস্টম ত্রুটি পৃষ্ঠাগুলি এএসপি.নেট এমভিসি 4 এ কাজ করবে


247

আমি 500, 404 এবং 403 এর জন্য প্রদর্শিত একটি কাস্টম ত্রুটি পৃষ্ঠা চাই I আমি যা করেছি তা এখানে:

  1. ওয়েবকনফিগে কাস্টম ত্রুটিগুলি নিম্নলিখিতভাবে সক্ষম করেছে:

    <customErrors mode="On" 
                  defaultRedirect="~/Views/Shared/Error.cshtml">
    
        <error statusCode="403" 
               redirect="~/Views/Shared/UnauthorizedAccess.cshtml" />
    
        <error statusCode="404" 
               redirect="~/Views/Shared/FileNotFound.cshtml" />
    
    </customErrors>
  2. ক্লাসে HandleErrorAttributeবিশ্বব্যাপী অ্যাকশন ফিল্টার হিসাবে নিবন্ধিত FilterConfig:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomHandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }
  3. উপরের প্রতিটি বার্তাগুলির জন্য একটি কাস্টম ত্রুটি পৃষ্ঠা তৈরি করা হয়েছে। 500 এর জন্য ডিফল্ট একটি বাক্সের বাইরে ইতিমধ্যে উপলব্ধ ছিল।

  4. প্রতিটি কাস্টম ত্রুটি পৃষ্ঠা দৃশ্যে ঘোষণা করা হয়েছে যে পৃষ্ঠার মডেল System.Web.Mvc.HandleErrorInfo

500 এর জন্য, এটি কাস্টম ত্রুটি পৃষ্ঠাটি দেখায়। অন্যদের জন্য, এটি না।

আমি কি অনুপস্থিত কিছু আছে?

দেখে মনে হচ্ছে OnExceptionএটি HandleErrorAttributeক্লাসের পদ্ধতিতে কোডের মাধ্যমে পড়ে কাস্টম ত্রুটিগুলি প্রদর্শন করার মতো নয় এবং এটি কেবল 500 টি পরিচালনা করছে।

অন্যান্য ত্রুটিগুলি পরিচালনা করতে আমাকে কী করতে হবে?


21
এই সেটআপটি দিয়ে কী অদ্ভুত তা হ'ল আপনার দৃষ্টিভঙ্গিতে পুনর্নির্দেশকরণ, নিয়ন্ত্রক ক্রিয়াকলাপ নয়। এই দর্শনগুলি রেন্ডার করার এবং মডেলটিতে পাস করার কথা কার? শুধু চিন্তা করছি.
অলিভার

2
এখানে বেশিরভাগ উত্তর হ'ল হয় সমস্ত ক্ষেত্রে পরিচালনা করে না বা ওয়েব সার্ভারকে "ভুল" উপায়ে প্রতিক্রিয়া দেখা দেয় কারণ ত্রুটির প্রতিক্রিয়া ফিরিয়ে দেওয়ার পরিবর্তে ত্রুটি পৃষ্ঠায় পুনর্নির্দেশ করা হয়। আপনি যদি সার্ভারটি ওয়েব সার্ভারগুলির প্রত্যাশিত উপায়ে প্রতিক্রিয়া দেখান সম্পর্কে যত্নশীল হন তবে এটি সম্পর্কে এখানে একটি বিশদ নিবন্ধ রয়েছে: benfoster.io/blog/aspnet-mvc-custom-error-pages । সতর্কতা অবলম্বন করুন যে এটি এখানে উত্তরগুলির মত সোজা নয়, তাই আপনি যদি একটি সহজ উত্তর চান তবে নীচের পরিবর্তে নীচের একটি ব্যবহার করুন।
rdans

1
এখানে asp.net ত্রুটি পরিচালনা জন্য বিভিন্ন কৌশল আরেকটি মহান নিবন্ধ dusted.codes/...
Godsayah

উত্তর:


351

আমার বর্তমান সেটআপ (এমভিসি 3 এ, তবে আমি মনে করি এটি এখনও প্রয়োগ হয়) একটি থাকার উপর নির্ভর করে ErrorController, তাই আমি ব্যবহার করি:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error">
      <error redirect="~/Error/NotFound" statusCode="404" />
    </customErrors>
</system.web>

এবং নিয়ামকটিতে নিম্নলিখিতগুলি রয়েছে:

public class ErrorController : Controller
{
    public ViewResult Index()
    {
        return View("Error");
    }
    public ViewResult NotFound()
    {
        Response.StatusCode = 404;  //you may want to set this to 200
        return View("NotFound");
    }
}

এবং মতামতগুলি আপনি যেভাবে প্রয়োগ করেন ঠিক সেভাবেই। আমি অ্যাপ্লিকেশন ডিবাগ মোডে থাকলে স্ট্যাক ট্রেস এবং ত্রুটি সম্পর্কিত তথ্য প্রদর্শন করার জন্য যদিও আমি কিছুটা যুক্তি যুক্ত করতে চাইছি। সুতরাং ত্রুটি। সিএসটিএমটিএল দেখতে এমন কিছু দেখাচ্ছে:

@model System.Web.Mvc.HandleErrorInfo
@{
    Layout = "_Layout.cshtml";
    ViewBag.Title = "Error";
}
<div class="list-header clearfix">
    <span>Error</span>
</div>
<div class="list-sfs-holder">
    <div class="alert alert-error">
        An unexpected error has occurred. Please contact the system administrator.
    </div>
    @if (Model != null && HttpContext.Current.IsDebuggingEnabled)
    {
        <div>
            <p>
                <b>Exception:</b> @Model.Exception.Message<br />
                <b>Controller:</b> @Model.ControllerName<br />
                <b>Action:</b> @Model.ActionName
            </p>
            <div style="overflow:scroll">
                <pre>
                    @Model.Exception.StackTrace
                </pre>
            </div>
        </div>
    }
</div>

7
এই পাবলোটির জন্য আপনার গ্লোবাল.এক্সএক্সে আপনার অ্যাপ্লিকেশন_এরর-তে কিছু রাখতে হবে?
অ্যালিসিয়া

12
নিয়ন্ত্রকের কোডটি আমার অভিজ্ঞতা থেকে কার্যকর হচ্ছে বলে মনে হচ্ছে না। এমভিসি 4 - একটি সিস্টেম নিক্ষেপ করা। অন্য কোনও নিয়ামকের মধ্যে ধারণার ফলে ত্রুটিযুক্তি নিয়ন্ত্রণকারী দ্বারা নয়, ত্রুটি। সিএসটিএমএল ফাইলটি রেন্ডার হয়ে যাবে। অন্য কেউ এই অভিজ্ঞতা?
নীলজার

53
অন্য কারও জন্য যারা এই সহায়কটি পেয়েছেন, তবে আরও প্রসঙ্গে প্রয়োজন; <কাস্টমআরিফারস> ট্যাগটি ওয়েব কোডফাইজে <system.web> এর ভিতরে চলে যায়।
gooberverse

7
অন্যদের জন্য আপডেট করুন - দৃশ্যত আমার সমস্যা, কারণ আমি ছিল ঘটছে redirectMode="ResponseRewrite"উপর CustomerErrorsউপাদান
KyleMit

41
Godশ্বরের ভালবাসার জন্য //you may want to set this to 200কোড মন্তব্য মন্তব্য উপেক্ষা করুন । এটা করো না!
ডেমেন্টিক

40

আমি পাবলো সলিউশনটি করেছি এবং আমার সর্বদা ত্রুটি ছিল (এমভিসি 4)

'ত্রুটি' বা এর প্রধান দর্শন পাওয়া যায় নি বা কোনও ভিউ ইঞ্জিন অনুসন্ধান করা অবস্থান সমর্থন করে না।

এ থেকে মুক্তি পেতে লাইনটি সরান

 filters.Add(new HandleErrorAttribute());

ফিল্টারকনফিগ.সি.এস.


আমি এটিকে সমাধান করার জন্য সর্বত্র তাকিয়ে ছিলাম। শেষ পর্যন্ত এর উত্তর ছিল। আমি জানতাম কেন এটি করা হচ্ছে তবে আমার হেকের জন্য আমি তা করতে পারিনি, অন্য লোকেরা যা বলেছে তার মতো তাত্পর্যপূর্ণভাবে চিন্তা না করেই। আমি কল্পনা করি যে আমি যখন এটিকে নির্দেশ করার জন্য আপনাকে ধন্যবাদ বলি তখন আমি ৩A০ আয়ারওয়াকের ব্যথা ভাগ করে নিই। লেজেন্ড!
আদম

এটি একটি বিকল্প এবং ত্রুটি নিয়ন্ত্রণকারী খুব ভাল কাজ করে। আপনি ফিল্টারকনফিগ.সি. তে ফিল্টারগুলি নিবন্ধভুক্ত করার পরে মনে হয়, ভাগ করা এবং আসল নিয়ন্ত্রকদের ভিউ ফোল্ডারে এটি ত্রুটিযুক্ত শ্যাশটিএমএল খুঁজবে। আপনি যখন ত্রুটি.আরএসটিএমটিএল পরিবর্তন করেন তখন আমাদের কাস্টম ত্রুটি নিয়ন্ত্রণকারী কাজ করে। তবে এই নিবন্ধটি যুক্ত করতে পারেন এমন একটি জায়গা রয়েছে এবং এটি গ্লোবাল.এক্সএক্স.এস. যদি আপনি Global.asax.cs এ রেজিস্টারগ্লোবাল ফিল্টারস (গ্লোবালফিল্টারক্লেকশন ফিল্টারস) ফাংশনে উল্লিখিত লাইন যুক্ত করেন এবং ফিল্টারকনফিগ.সি.এস থেকে অপসারণ করেন, এটি কার্যকর হয়।
isaolmez

আমি মনে করি এটি ফিল্টার নিবন্ধগুলির ক্রমের সাথে সম্পর্কিত। ত্রুটি নিয়ামক রাখুন এবং ফিল্টার নিবন্ধকে গ্লোবাল.এক্সএক্স.সি-তে সরান। পাবলিক স্ট্যাটিক অকার্যকর রেজিস্টারগ্লোবাল ফিল্টারস (গ্লোবালফিল্টারক্লেকশন ফিল্টারস) {ফিল্টারস.এড করুন (নতুন হ্যান্ডেলআরআর্ট্রিবিউট ()); }
isaolmez

24

আমি এমন কিছু করি যা পোস্ট করা অন্যান্য সমাধানগুলির চেয়ে কম কোডিংয়ের প্রয়োজন।

প্রথমত, আমার ওয়েবকনফিগে আমার কাছে নিম্নলিখিতগুলি রয়েছে:

<customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">
   <error redirect="~/ErrorPage/Oops/404" statusCode="404" />
   <error redirect="~/ErrorPage/Oops/500" statusCode="500" />
</customErrors>

এবং কন্ট্রোলার (/ নিয়ন্ত্রণকারী / এররপেজকন্ট্রোলার। সি) এর মধ্যে নিম্নলিখিত রয়েছে:

public class ErrorPageController : Controller
{
    public ActionResult Oops(int id)
    {
        Response.StatusCode = id;

        return View();
    }
}

এবং পরিশেষে, ভিউতে নিম্নলিখিতটি রয়েছে (সরলতার জন্য নিচে নামিয়ে দেওয়া হয়েছে তবে এটি বিপরীতে থাকতে পারে:

@{ ViewBag.Title = "Oops! Error Encountered"; }

<section id="Page">
  <div class="col-xs-12 well">
    <table cellspacing="5" cellpadding="3" style="background-color:#fff;width:100%;" class="table-responsive">
      <tbody>
        <tr>
          <td valign="top" align="left" id="tableProps">
            <img width="25" height="33" src="~/Images/PageError.gif" id="pagerrorImg">
          </td>
          <td width="360" valign="middle" align="left" id="tableProps2">
            <h1 style="COLOR: black; FONT: 13pt/15pt verdana" id="errortype"><span id="errorText">@Response.Status</span></h1>
          </td>
        </tr>
        <tr>
          <td width="400" colspan="2" id="tablePropsWidth"><font style="COLOR: black; FONT: 8pt/11pt verdana">Possible causes:</font>
          </td>
        </tr>
        <tr>
          <td width="400" colspan="2" id="tablePropsWidth2">
            <font style="COLOR: black; FONT: 8pt/11pt verdana" id="LID1">
                            <hr>
                            <ul>
                                <li id="list1">
                                    <span class="infotext">
                                        <strong>Baptist explanation: </strong>There
                                        must be sin in your life. Everyone else opened it fine.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Presbyterian explanation: </strong>It's
                                        not God's will for you to open this link.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong> Word of Faith explanation:</strong>
                                        You lack the faith to open this link. Your negative words have prevented
                                        you from realizing this link's fulfillment.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Charismatic explanation: </strong>Thou
                                        art loosed! Be commanded to OPEN!<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Unitarian explanation:</strong> All
                                        links are equal, so if this link doesn't work for you, feel free to
                                        experiment with other links that might bring you joy and fulfillment.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Buddhist explanation:</strong> .........................<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Episcopalian explanation:</strong>
                                        Are you saying you have something against homosexuals?<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Christian Science explanation: </strong>There
                                        really is no link.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Atheist explanation: </strong>The only
                                        reason you think this link exists is because you needed to invent it.<br>
                                    </span>
                                </li>
                                <li>
                                    <span class="infotext">
                                        <strong>Church counselor's explanation:</strong>
                                        And what did you feel when the link would not open?
                                    </span>
                                </li>
                            </ul>
                            <p>
                                <br>
                            </p>
                            <h2 style="font:8pt/11pt verdana; color:black" id="ietext">
                                <img width="16" height="16" align="top" src="~/Images/Search.gif">
                                HTTP @Response.StatusCode - @Response.StatusDescription <br>
                            </h2>
                        </font>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</section>

এটি ঠিক যেমন সহজ। এটি আরও বিস্তারিত ত্রুটি সম্পর্কিত তথ্য সরবরাহ করার জন্য সহজেই বাড়ানো যেতে পারে, তবে ELMAH পরিচালনা করে যে আমার জন্য এবং স্ট্যাটাস কোড এবং স্থিতি বিবরণ যা সাধারণত আমার প্রয়োজন হয় is


আমি মনে করি "~ / ত্রুটিপৃষ্ঠা / ওফস / 404" এর .config ফাইলটিতে পুনঃনির্দেশ সম্ভবত "~ / ত্রুটিপৃষ্ঠা / উফ? 404" হওয়া উচিত? কমপক্ষে সেটাই আমার পক্ষে কাজ করেছিল। সম্ভবত এটি কেবল রাউটিংয়ের উপর নির্ভর করে।
জোশ সটারফিল্ড

আইআইএস দ্বারা ছুঁড়ে দেওয়া ত্রুটিটি কীভাবে অনুকরণ করা যায়। এটি 500 বা 504 হ'ল এএসপি.নেট এমভিসি - আইআইএস থেকে ব্যতিক্রম অনুকরণ করার জন্য 5 কোডে যাতে আমার কাস্টম ত্রুটির পৃষ্ঠাটি পরীক্ষা করতে পারি
অবিচ্ছেদ্য

12

মনে হচ্ছে এখানে বেশ কয়েকটি পদক্ষেপ একসাথে বিশৃঙ্খলাবদ্ধ। আমি স্ক্র্যাচ থেকে যা করেছি তা সামনে রেখে দেব।

  1. ErrorPageনিয়ামক তৈরি করুন

    public class ErrorPageController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        public ActionResult Oops(int id)
        {
            Response.StatusCode = id;
            return View();
        }
    }
  2. এই দুটি কর্মের জন্য দর্শন যুক্ত করুন (ডান ক্লিক করুন -> দর্শন যোগ করুন)। এগুলি ত্রুটিপৃষ্ঠা নামক ফোল্ডারে উপস্থিত হওয়া উচিত।

  3. ভিতরে App_Startখুলুন এবং FilterConfig.csত্রুটি পরিচালনার ফিল্টারটি মন্তব্য করুন।

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Remove this filter because we want to handle errors ourselves via the ErrorPage controller
        //filters.Add(new HandleErrorAttribute());
    }
  4. ওয়েবকনফিগের অভ্যন্তরে নিম্নলিখিত <customerErrors>এন্ট্রিগুলি যুক্ত করুনSystem.Web

    <customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">
        <error redirect="~/ErrorPage/Oops/404" statusCode="404" />
        <error redirect="~/ErrorPage/Oops/500" statusCode="500" />
    </customErrors>
  5. পরীক্ষা (অবশ্যই)। আপনার কোডটিতে একটি অপরিবর্তিত ব্যতিক্রম ছুঁড়ে দেখুন এবং এটি 500 আইডি সহ পৃষ্ঠাটিতে যান দেখুন এবং তারপরে 404 দেখতে অস্তিত্ব নেই এমন কোনও পৃষ্ঠায় একটি URL ব্যবহার করুন।


আমি এই ত্রুটিটি পেয়ে An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.যাচ্ছিলাম আপনার কোড থেকে আমি যতটা গ্রহণ করেছি তা ওয়েবকনফাইগ ফাইলে রয়েছে, আমি যুক্ত করেছি <error redirect = "~/ControllerName/ActionName" statusCode="404"/>এবং এটি ভাল কাজ করেছে :) বাকী কোডটি ছিল পাবলো এর উত্তর থেকে। আমি MVC 5 ব্যবহার করছি এবং সত্তা ফ্রেমওয়ার্ক 6. আমি অপসারণ করা হয়নি filters.Add(new HandleErrorAttribute())থেকেFilterConfig.cs
sumedha

আইআইএস দ্বারা ছুঁড়ে দেওয়া ত্রুটিটি কীভাবে অনুকরণ করা যায়। এটি 500 বা 504 হ'ল এএসপি.নেট এমভিসি - আইআইএস থেকে ব্যতিক্রম অনুকরণ করার জন্য 5 কোডে যাতে আমার কাস্টম ত্রুটির পৃষ্ঠাটি পরীক্ষা করতে পারি
অবিচ্ছেদ্য

এছাড়াও, কীভাবে নিয়ন্ত্রণহীন ব্যতিক্রম ছোঁড়াবেন (পদক্ষেপ 5)। আমি কোডিংয়ে নতুন আছি দয়া করে গাইড করুন।
অবিচ্ছেদ্য

এখনও আমার জন্য কাজ করে না? রাউটিংয়ের কী হবে? ত্রুটি পৃষ্ঠার জন্যও কি আমার রাউটিং যুক্ত করা দরকার? যদি আমি পৃষ্ঠাটি আঘাত করি: লোকালহোস্ট: ৮৪ / এনফোর্সার / ব্লাহ আমি এতে পুনঃনির্দেশিত হয়েছি: লোকালহোস্ট: ৮৪ / এনফোর্সার / এনফোর্সার / ত্রুটি / নটফাউন্ড? এসপ্সেরারপাথ = /… ত্রুটি পৃষ্ঠাটি এএসপি.এনইটি দ্বারা সরবরাহিত একটি স্ট্যান্ডার্ড ত্রুটি পৃষ্ঠার মতো দেখাচ্ছে। কোন ধারনা?
রাদেক স্ট্রোগলস্কি

ওয়েবকনফিগের গ্রাহকতা উপাদানগুলি এটিকে আবদ্ধ করা উচিত। আপনার (প্রকল্প-তৈরি) ডিফল্ট রুট কোডটি ভাল কাজ করা উচিত।
ভিক্টোরিস্যাবার

11

আমি Global.asax.cs ফাইলটি ব্যবহার করার পরামর্শ দেব।

 protected void Application_Error(Object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    if (exception is HttpUnhandledException)
    {
        Server.Transfer("~/Error.aspx");
    }
    if (exception != null)
    {
        Server.Transfer("~/Error.aspx");
    }
    try
    {
        // This is to stop a problem where we were seeing "gibberish" in the
        // chrome and firefox browsers
        HttpApplication app = sender as HttpApplication;
        app.Response.Filter = null;
    }
    catch
    {
    }
}

1
আমি ভাবিনি যে আপনি এমভিসিতে একটি সার্ভার (ট্রান্সফার) করতে পারেন। আপনি কি ভাবেন যে ওপির কোনও মিশ্র সাইট আছে?
র‌্যাপ

1
কেন আমরা এমভিসি তে অ্যাপ্লিকেশন_আরার ব্যবহার করব? পুনঃনির্দেশ url বিকল্পগুলির সাথে আমাদের [হ্যান্ডেলরআর] অ্যাট্রিবিউটের মতো বিকল্প রয়েছে। এতে অ্যাপ্লিকেশন_অররের কোনও নির্দিষ্ট সুবিধা রয়েছে কি?
কুরকুলা

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

7

ম্যাক্সস্প্যান দ্বারা পোস্ট করা উত্তরের ভিত্তিতে, আমি গিটহাবের উপর একটি ন্যূনতম নমুনা প্রকল্প একসাথে রেখেছি সমস্ত কাজের অংশ দেখিয়েছি।

মূলত, ব্যতিক্রমটিকে বাধা দেওয়ার জন্য আমরা কেবলমাত্র Global.asax.cs এ একটি Application_Errorপদ্ধতি যুক্ত করি এবং একটি কাস্টম ত্রুটি পৃষ্ঠায় আমাদের পুনর্নির্দেশের (বা আরও সঠিকভাবে, অনুরোধ স্থানান্তর ) একটি সুযোগ দেই ।

    protected void Application_Error(Object sender, EventArgs e)
    {
        // See http://stackoverflow.com/questions/13905164/how-to-make-custom-error-pages-work-in-asp-net-mvc-4
        // for additional context on use of this technique

        var exception = Server.GetLastError();
        if (exception != null)
        {
            // This would be a good place to log any relevant details about the exception.
            // Since we are going to pass exception information to our error page via querystring,
            // it will only be practical to issue a short message. Further detail would have to be logged somewhere.

            // This will invoke our error page, passing the exception message via querystring parameter
            // Note that we chose to use Server.TransferRequest, which is only supported in IIS 7 and above.
            // As an alternative, Response.Redirect could be used instead.
            // Server.Transfer does not work (see https://support.microsoft.com/en-us/kb/320439 )
            Server.TransferRequest("~/Error?Message=" + exception.Message);
        }

    }

ত্রুটি নিয়ন্ত্রণকারী:

/// <summary>
/// This controller exists to provide the error page
/// </summary>
public class ErrorController : Controller
{
    /// <summary>
    /// This action represents the error page
    /// </summary>
    /// <param name="Message">Error message to be displayed (provided via querystring parameter - a design choice)</param>
    /// <returns></returns>
    public ActionResult Index(string Message)
    {
        // We choose to use the ViewBag to communicate the error message to the view
        ViewBag.Message = Message;
        return View();
    }

}

ত্রুটি পৃষ্ঠা দেখুন:

<!DOCTYPE html>

<html>
<head>
    <title>Error</title>
</head>
<body>

    <h2>My Error</h2>
    <p>@ViewBag.Message</p>
</body>
</html>

অন্য কিছুই জড়িত থাকে, তুলনায় নিষ্ক্রিয় / অপসারণ অন্যান্য filters.Add(new HandleErrorAttribute())মধ্যে FilterConfig.cs

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        //filters.Add(new HandleErrorAttribute()); // <== disable/remove
    }
}

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


3

আমার সবকিছু সেট আপ ছিল তবে স্থানীয় উন্নয়ন সার্ভারগুলিতে সবকিছু ঠিকঠাক কাজ করার পরেও আমাদের স্টেজিং সার্ভারে স্থিতি কোড 500 এর জন্য সঠিক ত্রুটি পৃষ্ঠাগুলি দেখতে পেলাম না।

আমি রিক স্ট্রহলের এই ব্লগ পোস্টটি পেয়েছি যা আমাকে সাহায্য করেছিল।

Response.TrySkipIisCustomErrors = true;আমার কাস্টম ত্রুটি পরিচালনার কোডে আমার যুক্ত হওয়া দরকার ।


@ শন314 আপনি বোঝাচ্ছেন যে কোডটি আপনি কোথায় রেখেছেন? অনুরোধটি পরিচালনা করে এমন ক্রিয়াতে। আপনি ব্লগ পোস্টে উদাহরণ দেখতে পারেন।
ডিসিএসানন

2

এখানে আমার সমাধান। ব্যবহারের [ExportModelStateToTempData] / [ImportModelStateFromTempData] আমার মতে অস্বস্তিকর ।

~ / দেখেছে / হোম / Error.cshtml:

@{
    ViewBag.Title = "Error";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Error</h2>
<hr/>

<div style="min-height: 400px;">

    @Html.ValidationMessage("Error")

    <br />
    <br />

    <button onclick="Error_goBack()" class="k-button">Go Back</button>
    <script>
        function Error_goBack() {
            window.history.back()
        }
    </script>

</div>

~ / কন্ট্রোলার / HomeController.sc:

public class HomeController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Error()
    {
        return this.View();
    }

    ...
}

~ / কন্ট্রোলার / BaseController.sc:

public class BaseController : Controller
{
    public BaseController() { }

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is ViewResult)
        {
            if (filterContext.Controller.TempData.ContainsKey("Error"))
            {
                var modelState = filterContext.Controller.TempData["Error"] as ModelState;
                filterContext.Controller.ViewData.ModelState.Merge(new ModelStateDictionary() { new KeyValuePair<string, ModelState>("Error", modelState) });
                filterContext.Controller.TempData.Remove("Error");
            }
        }
        if ((filterContext.Result is RedirectResult) || (filterContext.Result is RedirectToRouteResult))
        {
            if (filterContext.Controller.ViewData.ModelState.ContainsKey("Error"))
            {
                filterContext.Controller.TempData["Error"] = filterContext.Controller.ViewData.ModelState["Error"];
            }
        }

        base.OnActionExecuted(filterContext);
    }
}

~ / কন্ট্রোলার / MyController.sc:

public class MyController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Details(int id)
    {
        if (id != 5)
        {
            ModelState.AddModelError("Error", "Specified row does not exist.");
            return RedirectToAction("Error", "Home");
        }
        else
        {
            return View("Specified row exists.");
        }
    }
}

আমি আপনাকে সফল প্রকল্পগুলি কামনা করি ;-)


2

আপনি গ্লোবাল.সি.কে হ্যাক না করে, হ্যান্ডলিআরআরট্রিবিউটের সাথে জগাখিচুড়ি, রেসপন্স করেই সঠিকভাবে কাজ করতে ত্রুটিগুলি পেতে পারেন Application

System.web এ (কেবল স্বাভাবিক, অন / অফ)

<customErrors mode="On">
  <error redirect="/error/401" statusCode="401" />
  <error redirect="/error/500" statusCode="500" />
</customErrors>

এবং system.webServer এ

<httpErrors existingResponse="PassThrough" />

এখন জিনিসগুলি প্রত্যাশা অনুযায়ী আচরণ করা উচিত এবং আপনার যা প্রয়োজন তা প্রদর্শন করতে আপনি নিজের ত্রুটি নিয়ন্ত্রণকারী ব্যবহার করতে পারেন।


আইআইএস দ্বারা ছুঁড়ে দেওয়া ত্রুটিটি কীভাবে অনুকরণ করা যায়। এটি 500 বা 504 হ'ল এএসপি.নেট এমভিসি - আইআইএস থেকে ব্যতিক্রম অনুকরণ করার জন্য 5 কোডে যাতে আমার কাস্টম ত্রুটির পৃষ্ঠাটি পরীক্ষা করতে পারি
অবিচ্ছেদ্য

@ অলঙ্ঘনীয় একটি ব্যতিক্রম ছোঁড়ার জন্য অস্থায়ীভাবে আপনার কোডটি পরিবর্তন করুন।
theycallmemorty

আমার জন্য কোনও পার্থক্য করেনি। আমি আমার কাস্টম ত্রুটি পৃষ্ঠায় একটি ব্যতিক্রম বা 404 ত্রুটি খুঁজে পাওয়া যায় নি।
pnizzle

0

দেখে মনে হচ্ছে আমি পার্টিতে দেরি করে এসেছি, তবে আপনারও এটি আরও ভাল করে পরীক্ষা করা উচিত।

সুতরাং system.webঅ্যাপ্লিকেশনটির মধ্যে ব্যতিক্রমী বিষয়গুলি যেমন ক্যাচ করার জন্য যেমন এইচটিটিপিএনটফাউন্ড রিটার্ন করুন ()

  <system.web>
    <customErrors mode="RemoteOnly">
      <error statusCode="404" redirect="/page-not-found" />
      <error statusCode="500" redirect="/internal-server-error" />
    </customErrors>
  </system.web>

এবং system.webServerত্রুটিগুলি ধরার জন্য যা আইআইএস দ্বারা ধরা পড়েছিল এবং এসপ নেটওয়ার্ডের কাঠামোর দিকে যায় নি

 <system.webServer>
    <httpErrors errorMode="DetailedLocalOnly">
      <remove statusCode="404"/>
      <error statusCode="404" path="/page-not-found" responseMode="Redirect"/>
      <remove statusCode="500"/>
      <error statusCode="500" path="/internal-server-error" responseMode="Redirect"/>
  </system.webServer>

গত এক আপনি ক্লায়েন্ট প্রতিক্রিয়া সম্পর্কে চিন্তা তারপর পরিবর্তন responseMode="Redirect"করার জন্য responseMode="File"এবং একটি স্ট্যাটিক HTML ফাইল পরিবেশন করা, যেহেতু এই এক একটি 200 প্রতিক্রিয়া কোড সঙ্গে একটি বন্ধুত্বপূর্ণ পৃষ্ঠা প্রদর্শন করা হবে।


0

ওয়েবকনফিগে এটি নীচে হিসাবে system.webserver ট্যাগের অধীনে যুক্ত করুন,

<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404"/>
  <remove statusCode="500"/>
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound"/>
  <error statusCode="500" responseMode="ExecuteURL"path="/Error/ErrorPage"/>
</httpErrors>

এবং একটি নিয়ামক হিসাবে যুক্ত করুন,

public class ErrorController : Controller
{
    //
    // GET: /Error/
    [GET("/Error/NotFound")]
    public ActionResult NotFound()
    {
        Response.StatusCode = 404;

        return View();
    }

    [GET("/Error/ErrorPage")]
    public ActionResult ErrorPage()
    {
        Response.StatusCode = 500;

        return View();
    }
}

এবং তাদের সম্মানিত মতামত যুক্ত করুন, এটি অবশ্যই সবার জন্য অনুমান করি।

এই সমাধানটি আমি এটি থেকে পেয়েছি: নেপচুন শতাব্দী

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