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
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.
Üretimde Java G1 çöp toplama...