登录页面的Asp.Net MVC捆绑。

7
我有一个使用表单身份验证且没有“公共”访问权限的Asp.Net MVC网站。未经身份验证的请求重定向到我的Login控制器。在View中,我通过Bundles引用css和js文件。然而,在部署时,对这些Bundles的请求都将重定向到带有RedirectUrl参数的登录页面。明白吗?
那么,如何使特定的Bundles在不需要身份验证的情况下可访问?
作为一种简单的解决办法,我知道可以直接引用放置在public文件夹中的单个文件,但这会绕过所有最小化的好处。
谢谢。
2个回答

10

有几件事情你需要做。

首先,将你想呈现的脚本和样式的名称更改为不与应用程序中的文件夹冲突的名称。因此,如果你有一个~/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>

这将防止表单身份验证重定向并提供您的内容。


我可能会有误解,但您的答案似乎不一致。您建议将 ~/Content/styles/css 作为bundle URL,但授权路径示例使用了 bundles - Rudey
编辑了我的示例以使其更清晰。希望能有所帮助。 - Brian Dishaw

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
谢谢Matt。'真实'文件可以在未经身份验证的情况下访问。例如,/Content/style.css将起作用,但是@Styles.Render("/Content/style") 会触发身份验证程序,并被重定向到登录页面?RedirectUrl=...。这样说你明白了吗? - Chris Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接