2014-02-22 73 views
4

我有一個Asp.Net MVC網站,它使用表單身份驗證並且沒有「公共」訪問權限。未經身份驗證的請求會重定向到我的登錄控制器。在視圖中,我通過Bundles引用css和js文件。但是,部署後,對這些軟件包的請求都將使用RedirectUrl參數重定向到登錄頁面。合理?Asp.Net MVC捆綁登錄頁面

那麼,我怎樣才能得到特定的捆綁無需認證即可訪問?

作爲一個糟糕的解決方法,我知道我可以引用放置在公共文件夾中的單個文件 - 但是這規避了所有最小化的好處。

謝謝。

回答

1

你應該把這些捆綁的母版視圖頁

在母版頁上,你應該有這樣的事情:

@RenderSection("scripts", required: false) 

在你看來只是增加你的腳本是這樣的:

@section Scripts{ 
//put all your scripts here 
} 

你可以在標題中爲你需要的東西定義一段,併爲css做同樣的事情。

如果這不起作用,您可能需要確保您的包名稱與您網站中實際路徑的名稱不衝突,否則mvc引擎將處理請求而不是提供您的文件。

最壞的情況下,你必須啓用匿名訪問到您的目錄在web.config中

<configuration> 
<location path="content"> 
<system.web> 
<authorization> 
<allow users="?" /> 
</authorization> 
</system.web> 
</location> 

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

</configuration> 
+4

謝謝馬特。這些'真實'的文件無需驗證即可訪問。例如,〜/ Content/style.css可以工作,但是@ Styles.Render(「〜/ Content/style」)會碰到認證例程並被重定向到Login?RedirectUrl = ...這有意義嗎? –

5

有幾個的,你需要做的事情。

首先,將要呈現的腳本和樣式的名稱更改爲與應用程序中的某個文件夾不衝突的內容。因此,如果您有~/Content/styles文件夾,請將您的樣式包命名爲~/Content/styles/css

包名稱末尾的/css用於防止將請求視爲腳本。

其次,你需要添加授權的Content或任何你打電話給你的包路徑在你的web.config

<location path="Content"> <!--or whatever you call your bundle path instead of Content--> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 

這將防止窗體身份驗證的重定向和服務於您的內容引用。

+0

我可能在這裏誤解了一些東西,但你的回答似乎不一致。您建議'〜/ Content/styles/css'作爲包URL,但授權路徑示例使用'bundles'。 –

+0

爲了清晰起見編輯我的示例。希望有所幫助。 –