কেবলমাত্র উত্পাদনে এএসপি.নেট এমভিসি প্রয়োজনের HTTP ps


121

অনিরাপদ এইচটিটিপি অনুরোধগুলিকে কোনও ক্রিয়া পদ্ধতিতে প্রেরণ করা থেকে বিরত রাখতে আমি প্রয়োজনীয়তা HTTPAttribute ব্যবহার করতে চাই ।

সি শার্প

[RequireHttps] //apply to all actions in controller
public class SomeController 
{
    [RequireHttps] //apply to this action only
    public ActionResult SomeAction()
    {
        ...
    }
}

ভিবি

<RequireHttps()> _
Public Class SomeController

    <RequireHttps()> _
    Public Function SomeAction() As ActionResult
        ...
    End Function

End Class

দুর্ভাগ্যক্রমে, ASP.NET বিকাশ সার্ভার এইচটিটিপিএস সমর্থন করে না।

আমি কীভাবে আমার এএসপি.নেট এমভিসি অ্যাপ্লিকেশনটি প্রযোজনার পরিবেশে প্রকাশিত হওয়ার পরে রিকোয়ারএইচটিপি ব্যবহার করতে পারি, তবে যখন আমার উন্নয়ন কর্মশালায় এএসপি.নেট ডেভলপমেন্ট সার্ভারে চালিত হয় না তখন?


3
আপনার স্থানীয় আইআইএস এবং আইআইএস এক্সপ্রেসের সাথে পরীক্ষা করুন। আমার এসএসএল ব্লগগুলি ব্লগস.এমএসএন / বি
ক্রিকডি /

উত্তর:


129

আপনি যদি আপনার বিকাশের ওয়ার্কস্টেশনে রিলিজ তৈরি করেন তবে এটি সাহায্য করবে না, তবে শর্তসাপেক্ষ সংকলনটি কাজটি করতে পারে ...

#if !DEBUG
[RequireHttps] //apply to all actions in controller
#endif
public class SomeController 
{
    //... or ...
#if !DEBUG
    [RequireHttps] //apply to this action only
#endif
    public ActionResult SomeAction()
    {
    }

}

হালনাগাদ

ভিজ্যুয়াল বেসিকগুলিতে, বৈশিষ্ট্যগুলি প্রযুক্তিগতভাবে একই লাইনের অংশ যা তারা প্রয়োগ করে সংজ্ঞা হিসাবে as আপনি শর্তসাপেক্ষ সংকলনের বিবৃতিগুলিকে একটি লাইনের অভ্যন্তরে রাখতে পারবেন না, সুতরাং আপনাকে দুটি বার ফাংশন ঘোষণা লিখতে বাধ্য করতে হবে - একবার গুণটি দিয়ে এবং একবার ছাড়া। এটি কাজ করে, যদিও, আপনি যদি কদর্যতা মনে করেন না।

#If Not Debug Then
    <RequireHttps()> _
    Function SomeAction() As ActionResult
#Else
    Function SomeAction() As ActionResult
#End If
        ...
    End Function

আপডেট 2

বেশ কয়েকটি ব্যক্তি RequireHttpsAttributeউদাহরণ না দিয়েই উদ্ভবের কথা উল্লেখ করেছেন , তাই আপনার জন্য এখানে একটি। আমি মনে করি এই শর্তটি শর্তসাপেক্ষ সংকলনের পদ্ধতির চেয়ে অনেক বেশি পরিষ্কার হবে এবং এটি আপনার অবস্থানের ক্ষেত্রে আমার পছন্দ হবে।

অস্বীকৃতি: আমি এই কোডটি পরীক্ষা করে দেখিনি, এমনকি সামান্যও, এবং আমার ভিবি মোটামুটি মরিচা is আমি শুধু জানি এটি সংকলন করে। আমি স্পট, কুইন 3 এবং ল্যান্স ফিশারের পরামর্শের ভিত্তিতে এটি লিখেছি। যদি এটি কাজ না করে তবে এটি কমপক্ষে সাধারণ ধারণাটি পৌঁছে দিতে হবে এবং আপনাকে সূচনা করার দিকটি দেবে।

Public Class RemoteRequireHttpsAttribute
    Inherits System.Web.Mvc.RequireHttpsAttribute

    Public Overrides Sub OnAuthorization(ByVal filterContext As  _
                                         System.Web.Mvc.AuthorizationContext)
        If IsNothing(filterContext) Then
            Throw New ArgumentNullException("filterContext")
        End If

        If Not IsNothing(filterContext.HttpContext) AndAlso _
            filterContext.HttpContext.Request.IsLocal Then
            Return
        End If

        MyBase.OnAuthorization(filterContext)
    End Sub

End Class

মূলত, নতুন অনুরোধটি ডিফল্ট এসএসএল অনুমোদনের কোডটি চালানোর পরিবর্তে সরিয়ে দেয়, যদি বর্তমানের অনুরোধটি স্থানীয় হয় (যা আপনি লোকালহোস্টের মাধ্যমে সাইটটিতে অ্যাক্সেস করছেন)। আপনি এটি এর মতো ব্যবহার করতে পারেন:

<RemoteRequireHttps()> _
Public Class SomeController

    <RemoteRequireHttps()> _
    Public Function SomeAction() As ActionResult
        ...
    End Function

End Class

অনেক ক্লিনার! প্রদত্ত আমার আন-পরীক্ষিত কোডটি আসলে কাজ করে।


ওম, আমার জন্য আমার পোস্ট সম্পাদনা করার জন্য ধন্যবাদ, জ্যাক। আপনার প্রশ্নটি সি # তে ছিল, তাই আমি একটি সি # প্রতিক্রিয়া পোস্ট করেছি। আমি জানতাম না ভিবি প্রাসঙ্গিক ছিল। যে কেউ জানেন যে ভিবিতে বৈশিষ্ট্যগুলি নিয়ন্ত্রণ করতে শর্তসাপেক্ষ সংকলন ব্যবহার করার কোনও উপায় আছে, বা এটি কি সম্ভব নয়?
জোয়েল মুলার

হ্যাঁ, এটি সি # এর জন্য কাজ করে, এবং এটি ভিবিতেও কাজ করে, তবে আপনাকে ফাংশন / শ্রেণির সংজ্ঞাটির বদলে কিছু কুরুচিপূর্ণ নকল করতে হবে। উপরে আমার আপডেট উত্তর দেখুন।
জোয়েল মুলার

দুঃখিত। ভিবি কোডের নমুনাগুলি আসা আরও কঠিন এবং শক্ত হয়ে উঠছে। আমি ভাবিনি যে এটি গুরুত্বপূর্ণ হবে। আমি মূল প্রশ্নটি আপডেট করেছি। সি # তে নিশ্চিতভাবে গুণাবলী বিশিষ্ট শর্তসাপেক্ষ সংকলন কাজ করে? আমি পরীক্ষা করিনি। এটি একটি নিখুঁত, মার্জিত সমাধান বলে মনে হচ্ছে।
জ্যাক পিটারসন

আপনার RemoteRequireHttps এ্যাট্রিবিউট কোড পুরোপুরি কাজ করে। শর্তসাপেক্ষ সংকলনের চেয়ে এটি ভিবিতে অনেক বেশি মার্জিত। ধন্যবাদ আবার জোয়েল।
জ্যাক পিটারসন

2
ধন্যবাদ - এই আমার প্রয়োজন ঠিক ছিল। চিয়ার্স!
ডেভাকল্টার

65

কারও যদি সি # সংস্করণ প্রয়োজন হয়:

using System;
using System.Web.Mvc;

namespace My.Utils
{
    public class MyRequireHttpsAttribute : RequireHttpsAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }

            if (filterContext.HttpContext != null && filterContext.HttpContext.Request.IsLocal)
            {
                return;
            }

            base.OnAuthorization(filterContext);
        }
    }
}

ঠিক আছে যখন পড়া এই এবং এই একটি নিরাপত্তা পরিমাপ হিসাবে আমরা যোগ করা উচিত filters.Add(new MyRequireHttpsAttribute ());মধ্যে FilterConfig?
শাইজুট

এই উত্তরের উপর ভিত্তি করে আমি এমভিসি 6 এর জন্য একটি সমাধান তৈরি করেছি স্টার্টআপ.সি তে ফিল্টার ব্যবহার করে বা নিয়ন্ত্রণকারীতে অ্যাট্রিবিউট স্টাইল।
নিক নিবলিং

26

রিকোয়ারএইচটিপিএস থেকে ডারাইভ করা একটি ভাল পদ্ধতি।

পুরোপুরি ইস্যুটি পদক্ষেপ নিতে, আপনি স্ব-স্বাক্ষরিত শংসাপত্রের সাহায্যে আপনার স্থানীয় মেশিনে আইআইএস ব্যবহার করতে পারেন। আইআইএস অন্তর্নির্মিত ওয়েবসার্ভারের চেয়ে দ্রুত এবং আপনার বিকাশের পরিবেশটি আরও উত্পাদনের মতো advantage

স্কট হ্যানসেলম্যানের ভিএস 2010 এবং আইআইএস এক্সপ্রেসের সাথে স্থানীয় এইচটিটিপিএস প্রয়োগ করার কয়েকটি উপায়ের দুর্দান্ত সংস্থান রয়েছে।


হ্যাঁ - আপনি কোনও Mifi wifi Verizon ডিভাইস দিয়ে পোর্ট ফরওয়ার্ডিং করার চেষ্টা না করা অবধি 443 পোর্টটি ফরওয়ার্ডের জন্য উপলভ্য নয় !!! # * & # * & $
সাইমন_উইভার

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

1
@ ডেভাকল্টার - উইন্ডোজগুলির ক্লায়েন্ট সংস্করণগুলিতে আইআইএস এক্সপ্রেস ব্যবহার করুন, কোনও ক্যাসিনির প্রয়োজন নেই এবং এটি এসআইএসএল ক্ষমতা সহ আইআইএসের মতো কাজ করবে।
এরিক ফানকেনবাশ

@ মিস্ত্রি ম্যান - হ্যাঁ, আমি এই মন্তব্যটির পরে এটি খুঁজে পেয়েছি।
টিপটির

কীভাবে এই জাতীয় কাজগুলি করা যায় সে সম্পর্কে আরও তথ্য বা লিঙ্ক যুক্ত করা উচিত।
স্টেফেনবায়ার

12

এমভিসি ফিল্টার সিস্টেম এবং গ্লোবাল.এক্স্যাক্স.সি.কে উপকার করে, আমি ধরে নিচ্ছি আপনি এটি করতে পারেন ...

    protected void Application_Start()
    {
      RegisterGlobalFilters(GlobalFilters.Filters);
    }

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      if(Config.IsProduction) //Some flag that you can tell if you are in your production environment.
      {
        filters.Add(new RequireHttpsAttribute());
      }
    }

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

10

এটি যেমন এএসপি. নেট ডেভেলপমেন্ট সার্ভারের কারণে আপনার সমস্যাটিকে প্রথম স্থানে নিয়েছে, তাই লক্ষণীয় যে মাইক্রোসফ্টের এখন আইআইএস এক্সপ্রেস রয়েছে যা ভিজ্যুয়াল স্টুডিওতে জাহাজীকরণ করেছে (ভিএস 2010 এসপি 1 এর পরে)। এটি আইআইএসের একটি কাট-ডাউন সংস্করণ যা বিকাশ সার্ভারের মতো ব্যবহার করা সহজ, তবে এসআইএসএল সহ আইআইএস 7.5 এর সম্পূর্ণ বৈশিষ্ট্য সেটটিকে সমর্থন করে।

আইআইএস এক্সপ্রেসে এসএসএলের সাথে কাজ করার বিষয়ে স্কট হ্যানসেলম্যানের একটি বিস্তারিত পোস্ট রয়েছে ।


9

কাস্টম অ্যাট্রিবিউটে কীভাবে প্রয়োজনীয়তা HTTP বৈশিষ্ট্যটি উত্তরাধিকার সূত্রে প্রাপ্ত? তারপরে, আপনার কাস্টম বৈশিষ্ট্যের ভিতরে, স্থানীয় মেশিন থেকে অনুরোধ আসছে কিনা তা দেখার জন্য বর্তমান অনুরোধের ইসলোকাল সম্পত্তিটি পরীক্ষা করুন। যদি তা হয় তবে বেস কার্যকারিতা প্রয়োগ করবেন না। অন্যথায়, বেস অপারেশন কল করুন।


4

এটি আমার পক্ষে কাজ করেছে, এমভিসি 6 (এএসপি.নেট কোর 1.0) । ডিবাগটি বিকাশে রয়েছে কিনা কোড পরীক্ষা করে এবং যদি না হয়, এসএসএল প্রয়োজন হয় না। সমস্ত সম্পাদনাগুলি স্টার্টআপ.স. .

যোগ করুন

private IHostingEnvironment CurrentEnvironment { get; set; }

যোগ করুন

public Startup(IHostingEnvironment env)
{
    CurrentEnvironment = env;
}

সম্পাদনা:

public void ConfigureServices(IServiceCollection services)
{
    // additional services...

    services.AddMvc(options =>
    {
        if (!CurrentEnvironment.IsDevelopment())
        {
            options.Filters.Add(typeof(RequireHttpsAttribute));
        }
    });
}

3

যদি আপনি আহরণ করতে এবং ওভাররাইড করতে পারেন - এটি করুন। যদি আপনি না করতে পারেন - এমভিসি উত্স নিয়ে আসে, কেবল উত্সগুলি নিয়ে যান এবং আপনার নিজস্ব [ফোর্স HTTP] বৈশিষ্ট্য তৈরি করুন যা ইসলোকাল চেক করে।


3

এমভিসি 3 এর জন্য আমি নিজের ফিল্টারপ্রোভাইডার যুক্ত করেছি (এখানে পাওয়া কোডের ভিত্তিতে: গ্লোবাল এবং শর্তসাপেক্ষ ফিল্টারগুলি যে অন্যান্য জিনিসগুলির মধ্যে (স্থানীয় ব্যবহারকারীর জন্য ডিবাগ তথ্য প্রদর্শন ইত্যাদি) RequireHttpsAttributeকখন সাথে সমস্ত ক্রিয়া সাজাবে HttpContext.Request.IsLocal == false


অথবা অনুরোধটি স্থানীয় থাকাকালীন আপনি শর্তাধীন বৈশ্বিক ফিল্টার সংগ্রহের সাথে এটি যুক্ত করতে পারেন। নোট করুন যে অ্যাপ্লিকেশনটি তাত্ক্ষণিকভাবে শুরু হওয়ার অনুরোধ করা হয়েছে যেহেতু অনুরোধটি উপলব্ধ না হতে পারে তবে আপনি চেষ্টা / ক্যাপ ব্লকে এটি পরীক্ষা করতে চান।
tvanfosson

3

উদ্দীপনা নিয়ে গবেষণা করার পরে, আমি আইআইএস এক্সপ্রেস এবং কন্ট্রোলার শ্রেণির অন-অনুমোদন পদ্ধতি (রেফ # 1) এর ওভাররাইড দিয়ে এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি। আমি হ্যানসেলম্যান (রেফারেন্স # 2) দ্বারা প্রস্তাবিত রুটটি নিয়েও গিয়েছি। যাইহোক, দুটি কারণে আমি এই দুটি সমাধানের সাথে সম্পূর্ণ সন্তুষ্ট ছিলাম না: ১. রেফ # 1 এর অনঅর্টিফিকেশন কেবলমাত্র কন্ট্রোলার শ্রেনী স্তরে নয়, অ্যাকশন স্তরে কাজ করে Ref ), নেট কমান্ড, এবং, পোর্ট 80 এবং পোর্ট 443 ব্যবহার করার জন্য, আমাকে প্রশাসক হিসাবে VS2010 চালু করতে হবে, যা আমি ভ্রান্ত করেছি।

সুতরাং, আমি এই সমাধানটি নিয়ে এসেছি যা নিম্নলিখিত শর্তগুলির সাথে সরলতার দিকে দৃষ্টি নিবদ্ধ করে:

  1. আমি কন্ট্রোলার ক্লাস বা অ্যাকশন স্তরে रिक্যোয়ারএইচটিপিএস অ্যাটবুট ব্যবহার করতে সক্ষম হতে চাই

  2. আমি চাই যে এমভিসি প্রয়োজনে এইচটিপিএস ব্যবহার করবে, যখন প্রয়োজনের এইচটিপিএস বৈশিষ্ট্য উপস্থিত রয়েছে এবং এটি অনুপস্থিত থাকলে এইচটিটিপি ব্যবহার করবে

  3. প্রশাসক হিসাবে ভিজ্যুয়াল স্টুডিও চালাতে চাই না

  4. আইআইএস এক্সপ্রেস দ্বারা নির্ধারিত যে কোনও এইচটিটিপি এবং এইচটিটিপিএস পোর্ট ব্যবহার করতে সক্ষম হতে চাই (নোট # 1 দেখুন)

  5. আমি আইআইএস এক্সপ্রেসের স্ব-স্বাক্ষরিত এসএসএল শংসাপত্রটি পুনরায় ব্যবহার করতে পারি এবং আমি যদি অবৈধ এসএসএল প্রম্পটটি দেখি তবে আমার কোনও যত্ন নেই

  6. আমি ঠিক একই কোড বেস এবং একই বাইনারি এবং অতিরিক্ত সেটআপ (যেমন নেট, এমএমসি সার্ট স্ন্যাপ-ইন ব্যবহার ইত্যাদি) থেকে আলাদা হিসাবে পৃথক, পরীক্ষা এবং উত্পাদন করতে চাই 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>

3

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

<appSettings>
     <!--Use SSL port 44300 in IIS Express on development workstation-->
     <add key="UseSSL" value="44300" />
</appSettings>

আপনি এসএসএল ব্যবহার করতে না চাইলে কীটি সরান। যদি আপনি স্ট্যান্ডার্ড এসএসএল পোর্ট 443 ব্যবহার করেন তবে মানটি সরিয়ে দিন বা 443 নির্দিষ্ট করুন।

তারপরে আপনার শর্তের যত্ন নেওয়ার জন্য প্রয়োজনীয় HttpsAttribute এর কাস্টম বাস্তবায়ন ব্যবহার করুন । এটি আসলে প্রয়োজনের HTTP থেকে উদ্ভূত এবং শর্ত যুক্ত করে ব্যাক পদ্ধতির একই প্রয়োগ ব্যবহার করে।

public class RequireHttpsConditional : RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        var useSslConfig = ConfigurationManager.AppSettings["UseSSL"];
        if (useSslConfig != null)
        {
            if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidOperationException("The requested resource can only be accessed via SSL.");
            }

            var request = filterContext.HttpContext.Request;
            string url = null;
            int sslPort;

            if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0)
            {
                url = "https://" + request.Url.Host + request.RawUrl;

                if (sslPort != 443)
                {
                    var builder = new UriBuilder(url) {Port = sslPort};
                    url = builder.Uri.ToString();
                }
            }

            if (sslPort != request.Url.Port)
            {
                filterContext.Result = new RedirectResult(url);
            }
        }
    }
}

অ্যাকাউন্টকন্ট্রোলারে লগঅন পদ্ধতিটি সাজাতে ভুলবেন না

[RequireHttpsConditional]
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)

এবং https- এ ফর্ম পোস্ট করার জন্য আপনার লগঅন ভিউতে এর মতো কিছু ।

<% using (Html.BeginFormSecure("LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] }, Request.IsSecureConnection, Request.Url)) { %>

আমি এই ত্রুটিটি পাচ্ছি: এক্সএমএলএইচটিপিআরকোয়েস্ট m.XXX.com/Auth/SignIn লোড করতে পারে না । অনুরোধকৃত উত্সটিতে কোনও 'অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন' শিরোনাম উপস্থিত নেই। মূল ' m.XXX.com ' এ অ্যাক্সেসের অনুমতি নেই।
রঞ্জিত কুমার নাগিরি

2

জোল যেমন উল্লেখ করেছেন আপনি #if !DEBUGনির্দেশটি ব্যবহার করে সংকলনটি পরিবর্তন করতে পারেন ।

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


1

এমভিসি 6 (এএসপি.নেট কোর 1.0):

সঠিক সমাধানটি হবে env.IsPr Productions () বা env.IsDe વિકાસment () ব্যবহার করা। এই উত্তর পিছনে কারণ সম্পর্কে আরও পড়ুনকেবলমাত্র উত্পাদনে https কীভাবে প্রয়োজন তা

2 টি ভিন্ন শৈলীর জন্য নীচে কনডেন্সড উত্তর (নকশার সিদ্ধান্ত সম্পর্কে আরও পড়তে উপরের লিঙ্কটি দেখুন):

  1. Startup.cs - ফিল্টার নিবন্ধন করুন
  2. বেসকন্ট্রোলার - বৈশিষ্ট্য শৈলী

স্টার্টআপ.সি (ফিল্টার নিবন্ধ করুন):

public void ConfigureServices(IServiceCollection services)
{
    // TODO: Register other services

    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(RequireHttpsInProductionAttribute));
    });
}

বেসকন্ট্রোলার.সি (বৈশিষ্ট্য শৈলী):

[RequireHttpsInProductionAttribute]
public class BaseController : Controller
{
    // Maybe you have other shared controller logic..
}

public class HomeController : BaseController
{
    // Add endpoints (GET / POST) for Home controller
}

প্রয়োজনীয়হট্টিপিএসআইএনপ্রোডাকশনএট্রিবিউট : উপরের দু'টিই কাস্টম অ্যাট্রিবিউট ব্যবহার করে প্রয়োজনীয় হুটোপ্স অ্যাট্রিবিউট থেকে ব্যবহার করছে :

public class RequireHttpsInProductionAttribute : RequireHttpsAttribute
{
    private bool IsProduction { get; }

    public RequireHttpsInProductionAttribute(IHostingEnvironment environment)
    {
        if (environment == null)
            throw new ArgumentNullException(nameof(environment));
        this.IsProduction = environment.IsProduction(); 
    }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (this.IsProduction)
            base.OnAuthorization(filterContext);
    }
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        if(this.IsProduction)
            base.HandleNonHttpsRequest(filterContext);
    }
}

1

এটি ছিল আমার জন্য সবচেয়ে পরিষ্কার উপায়। আমার App_Start\FilterConfig.csফাইলে। যদিও রিলিজ বিল্ডগুলি চালাতে পারে না।

... 
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
        if (!Web.HttpContext.Current.IsDebuggingEnabled) {
            filters.Add(new RequireHttpsAttribute());   
        }
        ...
}

বিকল্পভাবে, আপনি যখন আপনার কাস্টম ত্রুটি পৃষ্ঠা চালু থাকে তখন আপনি কেবলমাত্র https এর প্রয়োজনে সেট করতে পারেন।

... 
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
        if (Web.HttpContext.Current.IsCustomErrorEnabled) {
            filters.Add(new RequireHttpsAttribute());   
        }
        ...
}

এই সহজ সমাধান যে MVC 5 :) মহান কাজ করে
MWD

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