যখন এটি প্রথম বিকাশ করা হয়েছিল, System.Web.Mvc.AuthorizeAttribute সঠিক কাজটি করছিল - এইচটিটিপি স্পেসিফিকেশনের পুরানো সংশোধনীগুলি "অননুমোদিত" এবং "অননুমোদিত" উভয়ের জন্য স্থিতি কোড 401 ব্যবহার করেছিল।
মূল স্পেসিফিকেশন থেকে:
যদি অনুরোধটিতে ইতিমধ্যে অনুমোদনের শংসাপত্রগুলি অন্তর্ভুক্ত থাকে তবে 401 প্রতিক্রিয়াটি নির্দেশ করে যে সেই শংসাপত্রগুলির জন্য অনুমোদন প্রত্যাখ্যান করা হয়েছে।
আসলে, আপনি ঠিক সেখানে বিভ্রান্তি দেখতে পাচ্ছেন - এটি "অনুমোদন" শব্দটি ব্যবহার করে যখন এর অর্থ "প্রমাণীকরণ"। যদিও প্রতিদিনের অনুশীলনে ব্যবহারকারী অনুমোদনপ্রাপ্ত তবে অনুমোদিত না হলে 403 জন নিষিদ্ধ হওয়া প্রত্যাবর্তন করা আরও বোধগম্য হয়। ব্যবহারকারীর কাছে শংসাপত্রগুলির একটি দ্বিতীয় সেট থাকবে যা তাদের অ্যাক্সেস দিতে পারে - চারপাশে খারাপ ব্যবহারকারীর অভিজ্ঞতা।
বেশিরভাগ অপারেটিং সিস্টেম বিবেচনা করুন - যখন আপনি কোনও ফাইল পড়ার চেষ্টা করেন যখন আপনার অ্যাক্সেস করার অনুমতি নেই, আপনাকে লগইন স্ক্রিন প্রদর্শিত হবে না!
ধন্যবাদ, অস্পষ্টতা অপসারণ করতে HTTP স্পেসিফিকেশন আপডেট করা হয়েছিল (জুন 2014) 2014
"হাইপার টেক্সট ট্রান্সপোর্ট প্রোটোকল (HTTP / 1.1) থেকে: প্রমাণীকরণ" (আরএফসি 7235):
401 (অননুমোদিত) স্থিতি কোডটি নির্দেশ করে যে অনুরোধটি প্রয়োগ করা হয়নি কারণ লক্ষ্য সংস্থার জন্য বৈধ প্রমাণীকরণের শংসাপত্রের অভাব রয়েছে।
"হাইপারটেক্সট ট্রান্সফার প্রোটোকল (HTTP / 1.1): শব্দার্থবিজ্ঞান এবং সামগ্রী" (আরএফসি 7231) থেকে:
403 (নিষিদ্ধ) স্থিতি কোডটি ইঙ্গিত দেয় যে সার্ভারটি অনুরোধটি বুঝতে পেরেছিল কিন্তু এটি অনুমোদিত করতে অস্বীকার করেছে।
মজার ব্যাপারটি যথেষ্ট, এএসপি.এনইটি এমভিসি 1 প্রকাশিত হওয়ার সময় অথরিজঅ্যাট্রিবিউটের আচরণটি সঠিক ছিল। এখন, আচরণটি ভুল - HTTP / 1.1 নির্দিষ্টকরণ স্থির করা হয়েছিল was
এএসপি.এনইটি-র লগইন পৃষ্ঠাটি পুনঃনির্দেশগুলি পরিবর্তনের প্রয়াসের পরিবর্তে উত্সটিতে সমস্যা সমাধান করা সহজ। আপনি আপনার ওয়েবসাইটের ডিফল্ট নেমস্পেসে একই নামের ( AuthorizeAttribute
) দিয়ে একটি নতুন বৈশিষ্ট্য তৈরি করতে পারেন (এটি খুব গুরুত্বপূর্ণ) তবে সংকলকটি স্বয়ংক্রিয়ভাবে এমভিসির মানকটির পরিবর্তে এটি বাছাই করবে। অবশ্যই আপনি যদি এই উপায়টি গ্রহণ করেন তবে আপনি সর্বদা বৈশিষ্ট্যটিকে একটি নতুন নাম দিতে পারেন could
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}