2014-01-16 86 views
1

我正在構建一個ASP.NET MVC Web應用程序,並試圖限制對頁面的訪問。限制對頁面的訪問但不能在ASP.NET MVC中啓動頁面

我指定我想使用窗體身份驗證在我的web.config:

<system.web> 
    ... 
    <authentication mode="Forms"> 
     <forms loginUrl="~/login" timeout="20" protection="All" /> 
    </authentication> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
    ... 
</system.web> 

這將拒絕訪問的所有頁面,但我想打一些網頁公開。我也可以在Web.config中做到這一點:

<location path="about-us"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="contact-us"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
… 

這工作都很好。問題在於開始頁面,更準確地說,當用戶轉到「http://www.mydomain.com/」時,沒有指定進一步的路徑。我怎樣才能指定這個頁面應該公開?

我試過了一些變化,但nothings似乎工作。我總是得到一個錯誤:

沒有路徑

<location> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

空路徑

<location path=""> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

<location path="."> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

Slash

<location path="/"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

有什麼建議嗎?

回答

1

您無需在您的web.config中爲MVC管理身份驗證。使用你的控制器類和方法[Authorize]屬性嘗試:

[Authorize] // everything here requires auth 
public class AdminController() 
{ 
    public ActionResult Dashboard() { ... } 
} 

public class ReportController() 
{ 
    [Authorize] // only this method requires auth 
    public ActionResult SecretReport() { ... } 

    public View PublicReport() { ... } 
} 

// everything here is accessible 
public class HomeController() 
{ 
    public ActionResult Index() { ... } 

    public ActionResult AboutUs() { ... } 

    public ActionResult ContactUs() { ... } 
} 

在ASP.NET MVC中,你可以使用[AllowAnonymous]它允許你這樣做正是對特定方法

+0

感謝回覆獵人,我會檢查出Authorize屬性。雖然我更喜歡如果我可以用屬性來做同樣的事情,就像我試圖用Web.config做的那樣,即需要授權所有控制器和動作作爲默認值,然後爲單個控制器或動作制定例外。我的大部分頁面都會受到限制,我真的不想忘記限制某些東西...... – haagel

+2

在這種情況下,我將使用'[Authorize]'屬性創建一個'BaseController'類,然後使用'[AllowAnonymous] '關於你想要訪問的方法。 – hunter

+1

很棒!謝謝獵人! :) – haagel

1

啓動頁面只是您在RouteConfig中提供的默認控制器。因此,如果您使用默認值,則需要允許訪問HomeControllerIndex()方法。在使用MVC和授權時,我發現this非常有價值。