404 ফেরত পেতে কীভাবে এমভিসি অ্যাকশন পাবেন


142

আমার একটি ক্রিয়া রয়েছে যা একটি স্ট্রিং নেয় যা কিছু তথ্য পুনরুদ্ধার করতে ব্যবহৃত হয়। যদি এই স্ট্রিংয়ের ফলাফল কোনও ডেটা ফেরত না আসে (সম্ভবত এটি মুছে ফেলা হয়েছে বলে), আমি একটি 404 ফিরে আসতে চাই এবং একটি ত্রুটি পৃষ্ঠা প্রদর্শন করতে চাই।

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

এটি সম্পর্কে সবচেয়ে ভাল উপায় কি?

রেসপন্স সেট করার মতোই কি সহজ? স্ট্যাটাসকোড = 404?


আপনারও রেসপন্স রাখতে হবে ry ট্রাইস্কিপআইআইস কাস্টম এরিয়্যারস = সত্য; @ গেন্ডারদের উত্তরটি ছিল জীবন রক্ষাকারী ...
থান্ডার

উত্তর:


111

এটি করার একাধিক উপায় রয়েছে,

  1. আপনি সাধারণ এসপেক্স কোডে ঠিক বলেছেন এটি আপনার নির্দিষ্ট উপায়ে নির্ধারিত হতে পারে
  2. throw new HttpException(404, "Some description");

1
দেখার জন্য একটি বিষয় হ'ল যদি আপনার 404 টি পরিচালনা করার জন্য একটি কাস্টমঅরর পৃষ্ঠা সেট আপ করা থাকে তবে এই ত্রুটি পৃষ্ঠাটি 200 ফিরে আসবে (পাওয়া যায়নি পৃষ্ঠাটি পাওয়া গেছে ... :-() এবং নোটফাউন্ডের অ্যাকশনটির যথাযথ প্রতিক্রিয়া কোডটি সেট করুন S
নাইজেল

20
আমি কাজটি শেষ করেছি: রেসপন্স.স্ট্যাটাসকোড = 404; প্রতিক্রিয়া.ট্রাইস্কিপআইসক্রাস্টম এরিজেস = সত্য; রিটার্ন ভিউ ("মাই কাস্টমভিউ"); এটি আমার পরিস্থিতিতে পুরোপুরি কাজ করে।
পল হাইলস

@ পলহিলস: এমভিসি 3 এ আমার জন্য উত্তর। আশা করি আমি মন্তব্য না করে উত্তর হিসাবে উত্তর দিতে পারতাম।
ভালামাস

আইআইএস ব্যবহার করলে এটি কাজ করে না, আমি মনে করি। আমার পরীক্ষার সাইটে এটি দুর্দান্ত কাজ করে তবে লাইভ সাইটে কাস্টম ত্রুটির পৃষ্ঠাটি কিক্স করে
অ্যান্ডি ব্রাউন

@ অ্যান্ডি ব্রাউন এটি আইআইএসের পাশাপাশি আইআইএস এক্সপ্রেসের জন্যও কাজ করে, আপনার আইআইএস (অ্যাডমিন কনসোল) এর কনফিগারেশনটি পর্যালোচনা করতে হবে
ডিউফাই

150

এএসপি.নেট এমভিসি 3 এবং তারপরে আপনি কন্ট্রোলারের কাছ থেকে কোনও HTTPNotFoundResult ফিরে আসতে পারেন ।

return new HttpNotFoundResult("optional description");

4
ব্যবহার:return new HttpNotFoundResult("optional description");
ভালামাস

6
আপনি যদি নিয়ামকের মধ্যে থেকে ফিরে আসেন তবে একটি সুবিধামত পদ্ধতিও বলা হয় HttpNotFound()। সুতরাং আপনি return HttpNotFound("optional description")পরিবর্তে ফিরে আসতে পারে ।
লুইস পেরেজ


61

এমভিসি 4 এবং এর উপরে আপনি অন্তর্নির্মিত সহায়তা HttpNotFoundপদ্ধতিগুলি ব্যবহার করতে পারেন :

if (notWhatIExpected)
{
    return HttpNotFound();
}

অথবা

if (notWhatIExpected)
{
    return HttpNotFound("I did not find message goes here");
}

26

কোড:

if (id == null)
{
  throw new HttpException(404, "Your error message");//RedirectTo NoFoundPage
}

Web.config

<customErrors mode="On">
  <error statusCode="404" redirect="/Home/NotFound" />
</customErrors>

এছাড়াও, উপলব্ধ সমস্ত স্ট্যাটাস কোডগুলি এই এনামে বিদ্যমান: এইচটিটিপিস্ট্যাটাসকোড।
ব্যবহারকারী 2173353

12

আমি এটি ব্যবহার করেছি:

Response.StatusCode = 404;
return null;

ধন্যবাদ. এটি সার্ভারে ব্যয়বহুল ব্যতিক্রম ছোঁড়ার চেয়ে আরও ভাল দেখাচ্ছে। ভাবুন যে 404 আইআইএস লগ ইন করা হবে ... আদর্শভাবে এটি হবে।
fozylet

1
তবে, এ্যাসপনেটে, এই পদ্ধতিটি কোনও ভাল সমাধান নয়, তাই না? যেহেতু ওয়েব পৃষ্ঠাটি সার্ভারের সম্পর্কিত সমস্ত সংবেদনশীল তথ্য প্রদর্শন করবে।
lzlstyle

1
একটি ব্যতিক্রম হ্যান্ডেল করতে মিলিসেকেন্ডের চেয়ে কম লাগবে। কয়েকশ মিলসেকেন্ডের তুলনায় কেবল একটি এইচটিটিপি সংযোগ করতে ব্যর্থ এবং এটি অর্থহীন। এইচটিটিপিএক্সেপশন নিক্ষেপ করুন বা HTTPNotFoundResult ফিরিয়ে দিন, ম্যানুয়ালি স্থিতি কোডটি সেট করুন এবং নালটি ফিরে আসা ভয়ঙ্কর।
জর্জ


5

NerdDinner এ যেমন। চেষ্টা করে দেখুন

public ActionResult Details(int? id) {
    if (id == null) {
        return new FileNotFoundResult { Message = "No Dinner found due to invalid dinner id" };
    }
    ...
}

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

4

উপরের উদাহরণগুলির মধ্যে আমার পক্ষে কাজ করা হয়নি যতক্ষণ না আমি নীচের মাঝের লাইনটি যোগ করেছি:

public ActionResult FourOhFour()
{
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true; // this line made it work
    return View();
}

2
আপনি কি আমাকে গুরুত্ব সহকারে বলছেন যে সহজটি return HttpNotFound();আপনার পক্ষে কাজ করে নি? আপনার সিস্টেমের বয়স কত?
8:40

1
আপনি চেষ্টা করেছেন return HttpNotFound();? এটি এমভিসি 4 দিয়ে উপরের দিকে ঠিক কাজ করে। msdn.microsoft.com/en-us/library/… "আপনার অ্যাপ্লিকেশনটি আইআইএস 7.0 এ হোস্ট করা থাকে কেবল তখনই ট্রাইস্কিপিসিসটাস্টম এরিয়রিস বৈশিষ্ট্য ব্যবহৃত হয়। আইআইএস 7.0-এ ক্লাসিক মোডে চলাকালীন ট্রাইস্কিপিসিসটাস্টমইরিটির বৈশিষ্ট্য ডিফল্ট মানটি সত্য। যখন ইন্টিগ্রেটেড মোডে চলমান When , ট্রাইস্কিপিআইসিসটম এরিয়ার্সের সম্পত্তি ডিফল্ট মানটি মিথ্যা। "
কোডিং গেছে

2

আমি ব্যবহার করি:

Response.Status = "404 NotFound";

এটি আমার জন্য কাজ করে :-)


2

নেট কোর 1.1 তে:

return new NotFoundObjectResult(null);

1
আপনি যদি কোনও জিনিস ফেরত না নিচ্ছেন তবে নটফাউন্ড () ফিরিয়ে দেওয়া আরও উপযুক্ত তবে উভয় ক্ষেত্রেই, আপনি স্ট্যাটাসকোডপেজস উইথআরএক্সেকিউটের মতো কিছু না পরিচালনা করলে আপনি বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠাটি পাবেন না। Devtrends.co.uk/blog/handling-404-not-found-in-asp.net-core
পল


-1

নিম্নলিখিত ডেমো কোড চেষ্টা করুন:

public ActionResult Test()

{
  return new HttpStatusCodeResult (404,"Not found");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.