উদ্দীপনা নিয়ে গবেষণা করার পরে, আমি আইআইএস এক্সপ্রেস এবং কন্ট্রোলার শ্রেণির অন-অনুমোদন পদ্ধতি (রেফ # 1) এর ওভাররাইড দিয়ে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি। আমি হ্যানসেলম্যান (রেফারেন্স # 2) দ্বারা প্রস্তাবিত রুটটি নিয়েও গিয়েছি। যাইহোক, দুটি কারণে আমি এই দুটি সমাধানের সাথে সম্পূর্ণ সন্তুষ্ট ছিলাম না: ১. রেফ # 1 এর অনঅর্টিফিকেশন কেবলমাত্র কন্ট্রোলার শ্রেনী স্তরে নয়, অ্যাকশন স্তরে কাজ করে Ref ), নেট কমান্ড, এবং, পোর্ট 80 এবং পোর্ট 443 ব্যবহার করার জন্য, আমাকে প্রশাসক হিসাবে VS2010 চালু করতে হবে, যা আমি ভ্রান্ত করেছি।
সুতরাং, আমি এই সমাধানটি নিয়ে এসেছি যা নিম্নলিখিত শর্তগুলির সাথে সরলতার দিকে দৃষ্টি নিবদ্ধ করে:
আমি কন্ট্রোলার ক্লাস বা অ্যাকশন স্তরে रिक্যোয়ারএইচটিপিএস অ্যাটবুট ব্যবহার করতে সক্ষম হতে চাই
আমি চাই যে এমভিসি প্রয়োজনে এইচটিপিএস ব্যবহার করবে, যখন প্রয়োজনের এইচটিপিএস বৈশিষ্ট্য উপস্থিত রয়েছে এবং এটি অনুপস্থিত থাকলে এইচটিটিপি ব্যবহার করবে
প্রশাসক হিসাবে ভিজ্যুয়াল স্টুডিও চালাতে চাই না
আইআইএস এক্সপ্রেস দ্বারা নির্ধারিত যে কোনও এইচটিটিপি এবং এইচটিটিপিএস পোর্ট ব্যবহার করতে সক্ষম হতে চাই (নোট # 1 দেখুন)
আমি আইআইএস এক্সপ্রেসের স্ব-স্বাক্ষরিত এসএসএল শংসাপত্রটি পুনরায় ব্যবহার করতে পারি এবং আমি যদি অবৈধ এসএসএল প্রম্পটটি দেখি তবে আমার কোনও যত্ন নেই
আমি ঠিক একই কোড বেস এবং একই বাইনারি এবং অতিরিক্ত সেটআপ (যেমন নেট, এমএমসি সার্ট স্ন্যাপ-ইন ব্যবহার ইত্যাদি) থেকে আলাদা হিসাবে পৃথক, পরীক্ষা এবং উত্পাদন করতে চাই possible
এখন, ব্যাকগ্রাউন্ড এবং ব্যাখ্যা ছাড়াই, আমি আশা করি এই কোডটি কাউকে সাহায্য করবে এবং কিছুটা সময় সাশ্রয় করবে। মূলত, একটি বেসকন্ট্রোলার শ্রেণি তৈরি করুন যা নিয়ামকের কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং এই বেস শ্রেণি থেকে আপনার নিয়ামক শ্রেণিভুক্ত হয়। যেহেতু আপনি এখন পর্যন্ত এটি পড়েছেন, আমি ধরে নিই যে আপনি এটি কীভাবে করতে জানেন। তো, শুভ কোডিং!
নোট # 1: এটি একটি কার্যকর ফাংশন 'getConfig' (কোড দেখুন) এর ব্যবহার দ্বারা অর্জন করা হয়েছে
রেফ # 1: http://puredotnetcoder.blogspot.com/2011/09/requirehttps-attribute-in-mvc3.html
রেফ # 2: HTTP
========== বেসকন্ট্রোলারে কোড =====================
#region Override to reroute to non-SSL port if controller action does not have RequireHttps attribute to save on CPU
// By L. Keng, 2012/08/27
// Note that this code works with RequireHttps at the controller class or action level.
// Credit: Various stackoverflow.com posts and http://puredotnetcoder.blogspot.com/2011/09/requirehttps-attribute-in-mvc3.html
protected override void OnAuthorization(AuthorizationContext filterContext)
{
// if the controller class or the action has RequireHttps attribute
var requireHttps = (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Count() > 0
|| filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Count() > 0);
if (Request.IsSecureConnection)
{
// If request has a secure connection but we don't need SSL, and we are not on a child action
if (!requireHttps && !filterContext.IsChildAction)
{
var uriBuilder = new UriBuilder(Request.Url)
{
Scheme = "http",
Port = int.Parse(getConfig("HttpPort", "80")) // grab from config; default to port 80
};
filterContext.Result = this.Redirect(uriBuilder.Uri.AbsoluteUri);
}
}
else
{
// If request does not have a secure connection but we need SSL, and we are not on a child action
if (requireHttps && !filterContext.IsChildAction)
{
var uriBuilder = new UriBuilder(Request.Url)
{
Scheme = "https",
Port = int.Parse(getConfig("HttpsPort", "443")) // grab from config; default to port 443
};
filterContext.Result = this.Redirect(uriBuilder.Uri.AbsoluteUri);
}
}
base.OnAuthorization(filterContext);
}
#endregion
// a useful helper function to get appSettings value; allow caller to specify a default value if one cannot be found
internal static string getConfig(string name, string defaultValue = null)
{
var val = System.Configuration.ConfigurationManager.AppSettings[name];
return (val == null ? defaultValue : val);
}
============== শেষ কোড =================
ওয়েব.রিলেজ.কনফিগ-এ, এইচটিপিপোর্ট এবং এইচটিপিএসপোর্টটি সাফ করার জন্য নিম্নলিখিতটি যুক্ত করুন (ডিফল্ট 80 এবং 443 ব্যবহার করতে)।
<appSettings>
<add key="HttpPort" value="" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
<add key="HttpsPort" value="" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>