21

我有一个在 IIS 上运行的 ASP.NET MVC 3 Beta 应用程序。在我的web.config定义中,我定义了以下负责表单身份验证的部分:

<authentication mode="Forms">
    <forms 
        loginUrl="~/Account/LogOn" 
        name=".VNK" 
        protection="All" 
        timeout="43200" 
        cookieless="UseCookies" />
</authentication>

定义的登录地址是~/Account/LogOn

当我尝试使用以下方式获取登录网址时:

FormsAuthentication.Initialize();
string loginUrl = FormsAuthentication.LoginUrl; 

我收到:/VNK/site/Account/Login

为什么我得到的地址与 中定义的地址不同web.config

更新:“/VNK/site/”前缀在这里不是问题。问题是类的LoginUrl属性FormsAuthentication不反映来自 web.config 的值。这意味着如果我将loginUrlweb.config 中的属性值从“~/Account/LogOn”更改为“~/foobar”,FormsAuthentication.LoginUrl仍然具有“/VNK/site/Account/Login”的值。为什么 ?

4

8 回答 8

27

我认为 ASP.NET MVC 3 Beta 中有一个错误。此问题不会出现在以前版本的 ASP.NET MVC 中。

如果有人想重播这个错误,他应该遵循这个:

1.下载mvc framevork

2 .创建新的ASP.NET MVC 3 Web 应用程序

3 .ApplayAuthorize属性在About动作中HomeController

[Authorize]
public ActionResult About()
{
   return View();
}  

4 .启动应用程序并通过单击关于选项卡调用关于操作。您将收到服务器错误,因为应用程序正在尝试将您重定向到这样的 URL:

http://localhost:[port_num]/Account/Login?ReturnUrl=%2fHome%2fAbout

显然没有登录视图。有登录视图。登录操作的 URL 在 untouched web.config 中定义:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

但应用程序并没有反映这一点。有没有人知道发生了什么事?

更新:

我是对的,MVC 3 Beta中有一个错误。从已知问题

“有一个已知问题会导致表单身份验证始终将未经身份验证的用户重定向到 /Account/Login,而忽略 Web.config 中使用的表单身份验证设置。解决方法是添加以下应用程序设置。”

<add key="autoFormsAuthentication" value="false" />

更新 2:

Alexander Prokofyev 注意到,ASP.NET 3 RTM寻找另一种设置。所以你需要这条线:

<add key="loginUrl" value="~/LogOn" />

于 2010-11-04T15:22:15.800 回答
1

如果您有权访问 IIS,则追加一个新应用程序并通过双击在应用程序池部分启用 ASP.NET“集成管道”。

如果您的托管服务提供商未授予您访问 IIS 的权限,请登录控制面板。

  • 转到网站,在管理选项卡下 - 启用 ASP.NET 集成管道内衬。
  • 将您的应用程序设置为虚拟目录 (它对我有用)
于 2012-01-31T03:34:49.467 回答
1

因此,简单的解决方案是从 Web 项目的 Bin 文件夹中删除WebMatrix.*.dll 。我已经为我的 asp.net 项目完成了此操作,因为它将我的登录重定向到 mvc 样式 url。

于 2013-01-23T15:50:38.390 回答
0

更新了 MVC 4 的答案,大量借用了此页面和请求重定向到 /Account/Login?ReturnUrl=%2f,因为 MVC 3 安装在服务器上

<appSettings>
   ...
   <add key="PreserveLoginUrl" value="true" />
</appSettings>

...

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="43200" /> <!--43,200 in minutes - 30 days-->
</authentication>
于 2014-03-20T19:12:39.113 回答
0

将以下内容放入 appSettings 中:

<add key="loginUrl" value="~/Account/LogOn" />

您可以从表单身份验证配置中清空 loginUrl。

于 2014-10-13T22:15:54.467 回答
0

我从我的 web.config 中删除了以下内容

<remove name="FormsAuthentication" />

然后一切似乎都奏效了。我创建项目时默认添加了此文本。

于 2016-03-18T15:06:49.973 回答
-1

波浪号 (~) 表示“我的网站的根”,因此您不必继续使用..\上下调整网站结构。但是,从 IIS 的角度来看,您的 Web 应用程序可能具有额外的目录结构层,当您以LoginUrl编程方式请求时会反映出这一层。我不确定您为什么要检索 LoginUrl,正常情况下,只要用户尝试访问未经身份验证的页面,IIS 就会自动将用户重定向到 LoginUrl。

于 2010-11-03T13:10:11.417 回答
-1

我认为服务器在这种情况下无法确定 ~ 的含义,请尝试为登录页面提供更直接的 url,例如 /Account/LogOn。

也许你会在这里找到有用的东西http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

于 2010-11-03T14:16:14.520 回答