2011-02-24 16 views
11

Ben MVC3 içine bir asp.net uygulaması dönüştürme ediyorum. Ben https'ye signin'i yönlendirmek ve http tüm diğer sayfaları tutabilir nasıl https ve diğer her sayfa sadece http ihtiyacı gerektirir sayfasında bir işaret var Diyelim?MVC3 https & http

Herhangi bir öneri harika olurdu!

cevap

14

RequireHttpsAttribute sınıf istediğini olabilir. Eğer dokunmak zorunda asla Nedeni : 1.

[RequireHttps] 
public ActionResult SignIn() { 
    return View(); 
} 
+0

Serin teşekkür Bertrand! mvc hayatı kolaylaştırıyor :) –

+0

Oturum açtıktan sonra, soru başına, http kullanarak açık bir şekilde bir sonraki sayfaya yönlendirmelisiniz. Bu şekilde, tüm zamanlar https'de kalmıyorlar. – Jab

+0

Bir sonraki sayfaya http: RedirectToAction() ile mümkün mü? – pramodtech

2

konu tüm istekleri günlüğüne sonra çünkü

4

Bu çözümü gibi istemeseniz bile https ise olacak olmasıdır tekrar VS'de. Dekoratör kendi başına, tarayıcının siteyi hata ayıklamada bile https'de oluşturmasına neden olur.

  1. Eğer bir ana kontrolöre içine uygulamak ve tüm denetleyicileri hiçbir "Öyle de denebilir" do arka kayma olduğunu biliyorum, o denetleyici devralan varsa.

    #if !DEBUG 
    #define RELEASE 
    #endif namespace ProjectName.UI.Controllers { 
        using System.Web.Mvc; 
        #if RELEASE 
         [RequireHttps] 
        #endif 
        public abstract partial class ProjectNameBaseController : Controller 
        { 
        } 
    } 
    
4

Bir madenin meslektaş ve ben bu baktım ve iyi bir çözüm buldu inanıyoruz. Bu RequireHttpsAttribute uzatarak çalışır

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class HttpsRequiredAttribute : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     // Check to see if we're secure 
     string requirestr = ConfigurationManager.AppSettings["RequireHttps"]; 
     bool require; 
     if (bool.TryParse(requirestr, out require) && require) 
      base.HandleNonHttpsRequest(filterContext); 
    }  

} 

ve AttributeTargets belirtildiği gibi, bir sınıf veya yöntem uygulanabilir: Burada ile geldi budur. Ardından RequireHttpsAttribute'deki sanal işlevi geçersiz kıldık. Yöntemin yaptığı, "RequireHttps" adlı bir anahtar için Web.config dosyasını kontrol etmektir. (Ne bool.tryparse çekler olan) o bulamıyorum, ya da geçersiz bool değeri varsa, o zaman Https gerektirmez. Değeri true olarak bulursa, HTTPS gerektirir.

Bu uzantıyı kullanırsanız, şöyle "RequireHttps" adlı Web.config anahtar eklemek gerekir: <add key="RequireHttps" value="true"/> Ardından sizi için bu değişkeni değiştirerek Https gereksinimini kapatabilirsiniz hata ayıklama yeniden veya siteniz dağıtıldığı yerde gereksinimi olması Web.config dosyasını değiştirerek'.