SORU
28 EKİM 2009, ÇARŞAMBA


ASP.NET MVC Üretimde RequireHttps

RequireHttpsAttribute bir eylem yöntemi gönderilmesini güvenli olmayan HTTP isteklerini engellemek için kullanmak istiyorum.

C#

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

VB

<RequireHttps()> _
Public Class SomeController

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

End Class

Ne yazık ki, ASP.NET Geliştirme Sunucusu HTTPS desteklemiyor.

Nasıl ASP.NET MVC benim uygulama üretim ortamına yayınlanan, ama gelişme benim iş istasyonu üzerinde çalıştırmak ASP.NET Geliştirme sunucuda değilken RequireHttps yararlanabilir miyim?

CEVAP
28 EKİM 2009, ÇARŞAMBA


Bu geliştirme istasyonunda oluşturur Serbest çalıştırırsanız faydası olmaz, ama koşullu derleme işi

#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()
    {
    }

}

Güncelleme

Visual Basic, nitelikleri teknik olarak uygulandığı tanım olarak aynı hattı bir parçasıdır. İşlev bildirimi iki öznitelik ile bir kez ve bir kez olmadan yazmak zorunda değilsin, bu yüzden bir çizgi içinde koşullu derleme deyimleri koyabilirsiniz. Eğer çirkinlik sakıncası yoksa işe yaramaz ama yine de yazmak istiyorum.

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

Güncelleme 2

Birkaç kişi bir örnek vermeden RequireHttpsAttribute kaynaklanan bahsetmiş, senin için geliyor. Bu yaklaşım koşullu derleme yaklaşımı daha temiz olacağını düşünüyorum, ve senin durumunda benim tercihim bu olur.

Yasal UYARI: Bu kod, küçük bir bit bile test etmedim, ve benim VB oldukça paslı. Tek bildiğim derler. Spot, queen3 ve Lance Fisher önerilerine dayanarak yazdım. Eğer işe yaramaz ise, en azından genel bir fikir iletmek ve başlangıç noktası vermelidir.

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

Temel olarak, yeni bir öznitelik sadece varsayılan geçerli yerel talep ise yetki kodu SSL koşmak yerine (localhost sitesine erişmek) çıkar. Bu gibi kullanabilirsiniz:

<RemoteRequireHttps()> _
Public Class SomeController

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

End Class

Çok daha temiz! Sağlanan BM-test benim kod aslında çalışıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006

İLGİLİ SORU / CEVAPLAR