গ্রাহকতা = "চালু" থাকাকালীন অ্যাপ্লিকেশন_এরআরটি গুলি চালাচ্ছে না


124

আমার global.asaxফাইলটির Application_Errorইভেন্টে কোড রয়েছে যা একটি ত্রুটি দেখা দিলে কার্যকর হয় এবং ত্রুটির বিবরণ আমার নিজের কাছে ইমেল করে।

void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();

    if (error.Message != "Not Found")
    {
        // Send email here...
    }

}

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

কিছু টেস্টিংয়ের পরে আমি Application_Errorযখন সেট করি তখন ফায়ারিংটি পেতে পারি customErrors="Off", তবে এটিকে পুনরায় customErrors="On"গুলি চালানো থেকে ইভেন্টটি থামিয়ে ফিরতে সেট করে ।

কেউ সক্ষম করতে পারবেন Application_Errorযখন customErrorsসক্রিয় করা হবে তখন গুলি চালানো হবে না কেন web.config?


আমার ঠিক একই সমস্যা হচ্ছে আমি এই এসও প্রশ্নটিও পেয়েছি: স্ট্যাকওভারফ্লো / প্রশ্ন / 3713939/… যা IIS7 সার্ভারটিকে ক্লাসিক মোডে রাখার পরামর্শ দেয়। দুর্ভাগ্যক্রমে এটি আমাদের পক্ষে বিকল্প নয়। কারও কি এর চেয়ে ভাল সমাধান আছে?
জেসি ওয়েব

এখানে অন্য সম্পর্কিত প্রশ্ন রয়েছে এবং এর উত্তরগুলি (যার মধ্যে কোনটিই গৃহীত হয় না) অ্যাপ্লিকেশন_এরার () কোনওটিই
জেসি ওয়েব

@ জুইবজ আমি কীভাবে এই বিষয়টি পেয়েছি তার একটি উত্তর পোস্ট করেছি, তবে কেন আমি এই আচরণটি পাচ্ছি তার কোনও দৃ any় দলিল পাইনি।
ডাব্লুডুফি

আমি একটি উত্তর যুক্ত করেছি যা ব্যাখ্যা করে যে Application_Error()পদ্ধতিটি কেন চালিত হচ্ছে না। আমি আমার চূড়ান্ত সমাধানটিও ব্যাখ্যা করেছিলাম।
জেসি ওয়েব

কাস্টম ত্রুটিগুলি কাজ করার জন্য সত্যই এই নিবন্ধটি সুপারিশ করুন ।
টমাসআরডাল

উত্তর:


133

আপডেট করুন
যেহেতু এই উত্তরটি কোনও সমাধান সরবরাহ করে, তাই আমি এটিকে সম্পাদনা করব না, তবে আমি এই সমস্যাটি সমাধান করার একটি আরও পরিষ্কার উপায় খুঁজে পেয়েছি। বিশদ জন্য আমার অন্যান্য উত্তর দেখুন ...

আসল উত্তর: পদ্ধতিটি
কেন চাওয়া 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()ব্যতিক্রম লগ করতে পদ্ধতি ব্যবহার করুন
  • এএসপিএক্স পৃষ্ঠাগুলি নির্দেশ করে, রেসপন্সরাইরাইটের সাথে কাস্টমআরারগুলি ব্যবহার করুন
  • এএসপিএক্স পৃষ্ঠাগুলি তাদের নিজস্ব প্রতিক্রিয়া স্থিতি কোডগুলির জন্য দায়ী করুন

এই সমাধানটি নিয়ে আমি লক্ষ্য করেছিলাম একটি দম্পতি ডাউনসাইড।

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

এই সমস্যাগুলির জন্য কাজের আশপাশ রয়েছে তবে তাদের দ্বারা কোনও অতিরিক্ত কাজ করার জন্য আমি যথেষ্ট উদ্বিগ্ন ছিলাম না।

আমি আশা করি এটি সবার সহায়তা করে!


2
+1 টি! সত্যিই ভাল কাজ কিন্তু এমপিসি মিশ্রণের ফলাফল কী হতে পারে এসপেক্স পৃষ্ঠাগুলির সাথে?
ডিয়েগো

2
আমরা এখন কয়েক মাস ধরে এটি প্রডিতে রেখেছি এবং আমি এর নেতিবাচক প্রভাব খুঁজে পাইনি। একমাত্র 'গ্যাচা' ছিল আমাদের এমআইসি-র প্রয়োজন হয় না তবে আমরা আমাদের সিআই পরিবর্তন করতে এবং একটি এসপম্পাইল এমএসবিল্ড টাস্ক করার জন্য মোতায়েন করতে হয়েছিল কারণ যখন আমরা .as ফাইলগুলি যুক্ত করেছি তখন তাদের এটি প্রয়োজন ছিল required অন্যান্য সমস্যা থাকতে পারে তবে সেগুলি এখনও প্রকাশিত হয়নি ...
জেসি ওয়েব

আমি এই পন্থাটি এমভিসি 4 এ ব্যবহার করার চেষ্টা করেছি এবং স্পষ্টতই এটি আমার জন্য কাজ করবে যখন আমি পেয়েছি <customErrors mode="Off" />। রয়ে filters.Add(new HandleErrorAttribute());সরানো বা না কোনো প্রভাব নেই।
গ্রজেগোর্জ সাওকিকি

এসপেক্স পৃষ্ঠায় আপনি যে ভিউটি দেখাতে চান তাতে কল করতে আপনি একটি এজ্যাক্স কল যুক্ত করতে পারেন। সদৃশ কোডটি রাখার পরে সংরক্ষণ করুন
মাইকে

71

আমি এটি এক্সপেশনফিল্টার তৈরি করে এবং সেখানে অ্যাপ্লিকেশন_আররের পরিবর্তে ত্রুটিটি লগ করে সমাধান করেছি। আপনাকে যা করতে হবে তা হ'ল রেজিস্টারগ্লোবাল ফিল্টারগুলিতে একটি কল যুক্ত করতে হবে

log4netExceptionFilter.cs

using System
using System.Web.Mvc;

public class log4netExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        Exception ex = context.Exception;
        if (!(ex is HttpException)) //ignore "file not found"
        {
            //Log error here
        }
    }
}

Global.asax.cs

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new log4netExceptionFilter()); //must be before HandleErrorAttribute
    filters.Add(new HandleErrorAttribute());
}

6
+1 যদি এই উত্তরটি কাজ করে তবে এটি অবশ্যই ত্রুটিগুলি পরিচালনা করার জন্য আমার কাছে সবচেয়ে মার্জিত এবং সম্ভবত উদ্দেশ্যযুক্ত উপায় (এমভিসি ফ্রেমওয়ার্ক দ্বারা) বলে মনে হচ্ছে।
ম্যাট হ্যামস্মিথ

2
এটি আমার পক্ষে নিখুঁতভাবে কাজ করে এবং এখানে গৃহীত উত্তরের চেয়ে অনেক বেশি পরিষ্কার। নিস!
অ্যালেক্স ওয়ারেন

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

3
আমি এটি চেষ্টা করেছি এবং এটি 404 এর ক্ষেত্রে ব্যতীত দুর্দান্তভাবে কাজ করেছে। 404s এর জন্য, এটি ত্রুটিগুলি.সি.এস.টি.এম.এল ভিউ প্রদর্শন করবে না, এটি আমাকে কেবল ওয়াইসোডি দেবে। যদি কাস্টম 404s প্রয়োজন হয় না, এই সমাধানটি অবশ্যই ক্লিনার!
জেসি ওয়েব

1
আমি এটা পছন্দ করি. 'কাস্টমআরফারস = অন' দিয়ে কাজ করে
ইলিডান

36

আমি একটি নিবন্ধ পেয়েছি যা একটি এমভিসি 3 ওয়েব অ্যাপ্লিকেশনটিতে কাস্টম ত্রুটি পৃষ্ঠাগুলি তৈরির অনেক পরিচ্ছন্ন উপায় বর্ণনা করে যা ব্যতিক্রমগুলি লগ করার ক্ষমতা রোধ করে না।

সমাধানটি হ'ল <httpErrors>উপাদানটি ব্যবহার করা<system.webServer> বিভাগের ।

আমি আমার ওয়েবকনফিগকে এমনভাবে কনফিগার করেছি ...

<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" />
  <error statusCode="500" path="/Error" responseMode="ExecuteURL" />
</httpErrors>

আমি customErrorsআছে কনফিগারmode="Off" (নিবন্ধটি হিসাবে প্রস্তাবিত) ।

এটি একটি ত্রুটি নিয়ন্ত্রণকারীের ক্রিয়া দ্বারা প্রতিক্রিয়াগুলিকে ওভাররেড করে তোলে। এই নিয়ামক এখানে:

public class ErrorController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult NotFound()
    {
        return View();
    }
}

মতামতগুলি খুব সোজা এগিয়ে রয়েছে, আমি পৃষ্ঠাগুলি তৈরি করতে কেবল স্ট্যান্ডার্ড রেজার সিনট্যাক্স ব্যবহার করেছি।

আপনার এমভিসির সাথে কাস্টম ত্রুটি পৃষ্ঠা ব্যবহার করার জন্য এটি একা যথেষ্ট।

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

public class ExceptionPublisherExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext exceptionContext)
    {
        var exception = exceptionContext.Exception;
        var request = exceptionContext.HttpContext.Request;
        // log stuff
    }
}

আপনাকে সর্বশেষে যা করতে হবে তা হ'ল আপনার Global.asax.cs ফাইলে ব্যতিক্রম ফিল্টারটি নিবন্ধন করুন:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ExceptionPublisherExceptionFilter());
    filters.Add(new HandleErrorAttribute());
}

এটি আমার আগের উত্তরের চেয়ে অনেক ক্লিনার সমাধানের মতো মনে হয় এবং আমি যতটা বলতে পারি ঠিক ততই কাজ করে। আমি এটি বিশেষত পছন্দ করি কারণ এটি এমভিসি কাঠামোর বিরুদ্ধে লড়াই করছি বলে মনে হয় নি; এই সমাধানটি আসলে এটির উপর নির্ভর করে!


6
এটি উল্লেখযোগ্য যে আমি এই সমাধানটি কেবল আইআইএস 7 এবং আরও নতুনতে কাজ করে বলে মনে করি; httpErferences উপাদানটি সম্প্রতি যুক্ত করা হয়েছিল।
জেসি ওয়েব

এই উত্তরটি আমার পক্ষে কার্যকর হয়নি, এটি আমার কাছে রয়েছে, এটি আমাকে মারাত্মক নীল খেলায়: HTTP Error 500.0 - Internal Server Error The page cannot be displayed because an internal server error has occurred. ত্রুটি পর্দা, আমার অনুরোধ করা /Error/Indexপৃষ্ঠা নয়
Serj Sagan

@ সেরজসাগান আমি এই পদক্ষেপগুলি পরীক্ষা করার জন্য একটি নতুন প্রকল্পে এটি চেষ্টা করেছিলাম এবং এটি ভাল কাজ করে। আপনি কি আইআইএস, আইআইএস এক্সপ্রেস, বা ভিএস ডেভ সার্ভার ব্যবহার করছেন? এটি ভিএস ডেভ সার্ভারে কাজ করবে না। আমি যখন আমার প্রকল্পটি আইআইএস নয়, ভিএস ডেভ সার্ভার ব্যবহার করার জন্য সেট করেছি তখন আমি কাস্টম ত্রুটি পৃষ্ঠাগুলির পরিবর্তে হলুদ-স্ক্রিন ত্রুটি লক্ষ্য করেছি।
জেসি ওয়েব

1
@ সেরজসাগান তবে মনে হচ্ছে আপনি ক্লাসিক হলুদ-পর্দার ত্রুটির বিপরীতে আইআইএস ব্লু-স্ক্রিন ত্রুটি পেয়ে যাচ্ছেন। এটি আমাকে ধরে নিতে বাধ্য করে যে আপনি আইআইএস এর কিছু ফর্ম ব্যবহার করছেন। যদি তা হয় তবে প্রথম বাক্যে আমি যে নিবন্ধটি যুক্ত করেছি তার মাধ্যমে একটি পঠন করুন, বিশেষত শেষ অংশটির শিরোনাম: "কয়েকটি গুরুত্বপূর্ণ নোট"। এটি বলে:To able to overwrite global settings in global IIS settings (file: C:\Windows\System32\inetsrv\config \applicationHost.config) should be: <section name="httpErrors" overrideModeDefault="Allow" />
জেসি ওয়েব

3
@ সেরজসাগান ত্রুটি পরিবর্তন করার কোডটি বিস্তারিতভাবে লোকাল কেবল বা কাস্টমতে আপনার পৃষ্ঠাটি দেখাবে।
ড্যানিয়েল পি

8

এএসপি.নেট এমভিসি 5 ব্যবহারের ক্ষেত্রে

public class ExceptionPublisherExceptionFilter : IExceptionFilter
    {
        private static Logger _logger = LogManager.GetCurrentClassLogger();
        public void OnException(ExceptionContext exceptionContext)
        {
            var exception = exceptionContext.Exception;
            var request = exceptionContext.HttpContext.Request;
            // HttpException httpException = exception as HttpException;
            // Log this exception with your logger
            _logger.Error(exception.Message);
        }
    }

আপনি তা খুঁজে পেতে পারেন FilterConfig.csএর App_Startফোল্ডার।


1

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

আপনি এখনও আপনার আইওসি একটি আইসেক্সেপশন ফিল্টার দিয়ে ব্যবহার করতে পারেন তবে আপনার বাইন্ডিংগুলি কনফিগার করতে এটি আরও জটিল।


0

আমি যতদূর জানি, আপনি ইউআরএল প্যারামিটারে উল্লিখিত পৃষ্ঠায় নিয়ন্ত্রণ ছাড়িয়ে চলেছেন এবং আপনার ইভেন্টের বিজ্ঞপ্তিটি অ্যাপ্লিকেশন_এররের পরিবর্তে এখানে বসবে

<customErrors defaultRedirect="myErrorPage.aspx"
              mode="On">
</customErrors>

এখানে প্রচুর তথ্য পাওয়া যাবে: http://support.microsoft.com/kb/306355


ক্রিসকে ধন্যবাদ, আমি ডকুমেন্টেশনটি পড়েছি এবং এটি প্রস্তাব দেয় যে যখন একটি অযথিত ত্রুটি ঘটে (যা আমি প্রত্যাশা করি) তখন অ্যাপ্লিকেশন_এরআর কল করা হবে এবং এটি সার্ভার.ক্লিয়ারআরার () কে ওয়েবকনফাইগ কাস্টম এরিয়ার্স বলা হবে না এটি চূড়ান্ত হ্যান্ডেল পয়েন্ট হবে। যাইহোক, কাস্টমআরআরগুলি সক্ষম করা হ'ল অ্যাপ্লিকেশন_আরারটিকে গুলি চালানো থেকে বিরত রাখছে।
ডাব্লুডুফি

আপনি যে ডকুমেন্টেশনের সাথে লিঙ্ক করেছেন সেটি এএসপি.এনইটি অ্যাপ্লিকেশন সম্পর্কে কথা বলছে এবং এটি এমভিসি 3 ওয়েব অ্যাপ্লিকেশনগুলি অন্যরকম আচরণ করছে।
জেসি ওয়েব

0

এটিকে ঘুরে দেখার জন্য আমি গ্রাহককে অক্ষম রেখেছি এবং গ্লোবাল.এক্সে অ্যাপ্লিকেশন_এরর ইভেন্ট থেকে সমস্ত ত্রুটিগুলি পরিচালনা করেছি। এমভিসির সাথে এটি সামান্য জটিল কারণ আমি কোনও 301 পুনর্নির্দেশ ফিরিয়ে দিতে চাইনি, আমি উপযুক্ত ত্রুটি কোডগুলি ফিরে আসতে চেয়েছিলাম। আরও বিশদটি আমার ব্লগে http://www.wduffy.co.uk/blog/used-application_error-in-asp-net-mvcs-global-asax-to-handle-erferences/ এ দেখা যাবে তবে চূড়ান্ত কোডটি নিচে তালিকাভুক্ত...

void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();
    var code = (error is HttpException) ? (error as HttpException).GetHttpCode() : 500;

    if (code != 404)
    {
            // Generate email with error details and send to administrator
    }

    Response.Clear();
    Server.ClearError();

    string path = Request.Path;
    Context.RewritePath(string.Format("~/Errors/Http{0}", code), false);
    IHttpHandler httpHandler = new MvcHttpHandler();
    httpHandler.ProcessRequest(Context);
    Context.RewritePath(path, false);
}

এবং এখানে নিয়ামক

public class ErrorsController : Controller
{

    [HttpGet]
    public ActionResult Http404(string source)
    {
            Response.StatusCode = 404;
            return View();
    }

    [HttpGet]
    public ActionResult Http500(string source)
    {
            Response.StatusCode = 500;
            return View();
    }

}

আমি আপনার সমাধান চেষ্টা করেছিলাম কিন্তু এটি আমার পক্ষে কার্যকর হয়নি। লাইনগুলি সহ Response.StatusCode = ###;, এটি এতে অন্তর্নির্মিত এমভিসি ত্রুটি পৃষ্ঠাগুলি দেখাচ্ছে C:\inetpub\custerr\en-US। আমি আমার অ্যাপ্লিকেশন_এরর () পদ্ধতি থেকে ম্যানুয়ালি এইচটিপিহ্যান্ডার্স বা কন্ট্রোলারদের অনুরোধ করার ধারণাটি পছন্দ করি না। আমি আনন্দিত যে আপনি যদিও আপনার সমস্যার সমাধান পেয়েছেন তবে আমি জানি এটি কী ধরণের মাথাব্যথা আমাকে দিয়েছে।
জেসি ওয়েব

0

এই ব্লগ এন্ট্রি আমাকে সাহায্য করেছে:

http://asp-net.vexedlogic.com/2011/04/23/asp-net-maximum-request-length-exceeded/

আপনি যদি আইআইএস 7.0 বা ততোধিক ব্যবহার করে থাকেন তবে খুব বেশি বড় অনুরোধগুলি পরিচালনা করতে আপনি আপনার ওয়েবকনফিগ ফাইলটি পরিবর্তন করতে পারেন। কিছু সতর্কতা আছে, কিন্তু এখানে একটি উদাহরণ:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1048576" />
    </requestFiltering>
  </security>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="13" />
    <error statusCode="404" subStatusCode="13" prefixLanguageFilePath="" path="/UploadTooLarge.htm" responseMode="Redirect" />
  </httpErrors>
</system.webServer>

এখানে এই কনফিগার ফাইল উপাদানগুলি সম্পর্কে অতিরিক্ত বিশদ রয়েছে:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

স্থিতি কোড 404.13 "সামগ্রীর দৈর্ঘ্য অত্যধিক বৃহত্তর" হিসাবে সংজ্ঞায়িত করা হয়। একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় তা maxAllowedContentLengthহল বাইটগুলিতে নির্দিষ্ট করা আছে। এটি বিভাগে maxRequestLengthআপনি যে সেটিংটি পেয়েছেন তার থেকে পৃথক <system.web>, যা কিলোবাইটে নির্দিষ্ট করা হয়েছে।

<system.web>
  <httpRuntime maxRequestLength="10240" />
</system.web>

এছাড়াও মনে রাখবেন pathঅ্যাট্রিবিউট একটি সুনির্দিষ্ট পাথ যখন হওয়া আবশ্যক responseModeহয় Redirect, তাই, ভার্চুয়াল ডিরেক্টরির নাম পূর্বে লিখুন যদি প্রাসঙ্গিক। জেসি ওয়েবের তথ্যমূলক উত্তরগুলি কীভাবে এটি করতে হয় তা দেখায় responseMode="ExecuteURL"এবং আমিও ভাবব যে এ পদ্ধতিটিও ভালভাবে কাজ করবে।

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


0

আমি যেখানে একই সমস্যা ছিল Application_Error() হিট হচ্ছিল না আমার ছিল। আমি সবকিছুই চেষ্টা করেছিলাম, অবশেষে যা ঘটেছিল তা দিয়ে পা রেখেছি। আমার একটি ELMAH ইভেন্টে কিছু কাস্টম কোড ছিল যা এটি প্রেরিত ইমেলটিতে JSON যুক্ত করেছিল এবং সেখানে একটি শূন্য ত্রুটি ছিল!

অভ্যন্তরীণ ত্রুটি সংশোধন করা কোডটিকে Application_Error()প্রত্যাশা অনুযায়ী ইভেন্টটিতে চালিয়ে যাওয়ার অনুমতি দেয় ।

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