Owin与MVC 5 - 重定向循环 - 如何调试?

时间:2014-01-27 16:24:11

标签: debugging asp.net-mvc-5 owin

我有一个MVC 4应用程序并将其转换为MVC 5,希望使用OWIN中间件。

我成功更新到MVC 5并在本文http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux中实现了OWIN。

当我访问应用程序主页时,我被重定向到指定的登录URL,然后它再次开始重定向到登录URL,直到浏览器以重定向循环错误结束尝试。

即使没有设置Authorize属性,我的登录控制器似乎也需要进行身份验证。我尝试添加AllowAnonymous属性,但没有变化。

我不知道如何调试OWIN正在做什么,我在整个应用程序中设置了几个断点,似乎我的代码永远不会被访问,所以重定向必须发生在中间件级别。

这是我在启动类中的OWIN配置:

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                   LoginPath = new PathString("/login"),
                   LogoutPath = new PathString("/sign-out"),
                   SlidingExpiration = true,
                   ExpireTimeSpan = new TimeSpan(0,30,0),
                   AuthenticationMode = AuthenticationMode.Active
            });

当我选择被动模式时,我只会收到未经授权的错误页面,不会发生重定向。

知道如何在我的场景中继续进行吗?有没有办法调试正在发生的事情?

感谢您的帮助,

Vilem

3 个答案:

答案 0 :(得分:3)

我也在关注你提到的文章,但我发现自己处于重定向循环中,尽管我的代码与文章代码匹配。

我在此处提示http://forums.asp.net/t/1960987.aspx?After+converting+MVC+4+project+to+MVC+5+I+am+getting+an+error+this+website+has+redirect+loop+后修复了我的重定向,建议IIS Express在本地配置文件中保存特定于站点的身份验证设置。

  

如果您正在使用不同的身份验证设置,IIS Express   在其配置文件中存储了其他身份验证设置。   类似的东西:

<location path="WebApplication1">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>
  

配置位于用户的文档文件夹

中      

文档\ IISExpress \配置\

     

你应该寻找

     

对ApplicationHost.config

     

然后只需删除&#39; location&#39; xml节点

     

亚当

答案 1 :(得分:2)

我疯了1天,最后我创建了一个新项目并一次报告一个视图,然后一个控制器一次报告错误。

我发现在“布局”页面中,有一些需要身份验证的操作,这导致了重定向。

    For example:
<a href="@Html.Action("Create","ads")" class="btn btn-primary navbar-btn btn-sm">

我已改为:

<a href="/Create/ads" class="btn btn-primary navbar-btn btn-sm">

答案 2 :(得分:0)

编辑: 在稍后的调查中,该问题是由“SecuritySwitch”插件引起的。我不得不完全删除它,似乎它根本不适用于MVC5 + Owin。

ORIGINAL: 我通过安装Visual Studio 2013试用版(我正常使用2012)并使用个人用户帐户身份验证模板集创建新的MVC5项目来解决这个问题。

然后我开始将我的代码从有问题的项目逐个迁移到这个,希望找到突破点。我没有找到任何代码,当我完全迁移它时,我的代码就像我想要的那样工作。

显然这不是一个真正的解决方案,但它完成了工作。简单地从头开始构建项目可以节省数小时/天的麻烦。