【问题标题】:302 Redirects seemingly happening before mvc routing. Help debugging redirects302 重定向似乎发生在 mvc 路由之前。帮助调试重定向
【发布时间】:2013-12-17 10:35:15
【问题描述】:

更新! 所以我认为我已经解决了这个问题 - 它又回来了。我的忽略路线似乎被忽略了。每个请求都被重定向:(

我正在开发一个 MVC 站点,其中大部分都在 EXTJS 中,因此它们只使用单个控制器、主页和登录视图。非常标准的设置 - 这是上周工作的,在 Home 控制器上调用 Index 操作,它立即重定向到 login 操作。好的 - 很好,这是预期的行为。

只有现在,每个链接的文件,css 或 javascript,都会被重定向回同一个登录页面。例外情况是通过 rest Uri 获取的几个脚本文件。因此,我下载了在此处传递的路由调试器,并将其 url 传递给了其中一个脚本文件。它立即重新格式化并重定向到登录页面,并将 returnurl 参数设置为我正在寻找的文件。这让我认为请求在到达任何 mvc 路由之前被重定向。这可能吗?我可以采取哪些进一步的步骤来调试此问题?

这是我的 global.asax 文件的路由内容:

/// <summary>
  /// Registers the routes.
  /// </summary>
  /// <param name="routes">The routes.</param>
  public static void RegisterRoutes(RouteCollection routes)
  {
     routes.IgnoreRoute(@"{resource}.axd/{*pathInfo}");
     routes.IgnoreRoute(@"resources/*"); //Redirecting!! Css and image files
     routes.IgnoreRoute(@"wcfrestbusinesslogic/*"); //This one works fine
     routes.IgnoreRoute(@"ext/*"); //These are also redirecting

     routes.IgnoreRoute(@"{*favicon}",
                        new
                        {
                           favicon = @"(.*/)?favicon.ico(/.*)?"
                        });

     routes.MapRouteLowercase(@"PasswordReset",
                              @"{action}/{guid}",
                              new
                              {
                                 controller = @"home",
                                 action = @"index"
                              },
                              new
                              {
                                 IsHome = new IsHomeActionConstraint(),
                                 guid = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$"
                              });

     routes.MapRouteLowercase(@"Home",
                              @"{action}/{output}",
                              new
                              {
                                 controller = @"home",
                                 action = @"index",
                                 output = UrlParameter.Optional
                              },
                              new
                              {
                                 IsHome = new IsHomeActionConstraint(),
                                 output = @"(json|xml|pdf|jpg|jpeg|tiff|png|csv)?"
                              });

     routes.MapRouteLowercase(@"Home2",
                              @"{action}/{id}/{output}",
                              new
                              {
                                 controller = @"home",
                                 action = @"index",
                                 id = UrlParameter.Optional,
                                 output = UrlParameter.Optional
                              },
                              new
                              {
                                 IsHome = new IsHomeActionConstraint(),
                                 id = @"[0-9]{1,}",
                                 output = @"(json|xml|pdf)?"
                              });

     routes.MapRouteLowercase(@"Home3",
                              @"{action}",
                              new
                              {
                                 controller = @"home",
                                 action = @"index"
                              },
                              new
                              {
                                 IsHome = new IsHomeActionConstraint()
                              });

     routes.MapRoute(@"Action",
                     @"{controller}/{action}/{output}",
                     new
                     {
                        controller = @"Home",
                        action = @"Index",
                        output = UrlParameter.Optional
                     },
                     new
                     {
                        output = @"(json|xml|pdf|png|csv)?"
                     });

     routes.MapRoute(@"Default",
                     @"{controller}/{action}/{id}/{output}",
                     new
                     {
                        controller = @"Home",
                        action = @"Index",
                        id = UrlParameter.Optional,
                        output = UrlParameter.Optional
                     },
                     new
                     {
                        id = @"[0-9]{1,}",
                        output = @"(json|xml|pdf)?"
                     });


  }

【问题讨论】:

  • 您检查过您的 web.config 文件吗?任何表单身份验证配置或类似的东西?
  • 这是默认行:
  • 查看我的答案,了解我如何解决我的问题 - 这些路由/身份验证建议值得保留作为真正的答案。

标签: asp.net asp.net-mvc extjs iis-7


【解决方案1】:

听起来您的表单身份验证正在保护文件。

你的 Web.Config 中有类似的东西吗?

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

【讨论】:

  • 是的 - 这似乎被忽略了。在 web.config 和 mvc 路由之前是否有任何 IIS 设置或任何检查?
  • 很抱歉收回答案,但这个问题又回来了,即使我的 IIS 中有这些。
  • @Gallen 你还有这个问题吗?这个答案对我有帮助。除非我按照指定在 web.config 中添加路径条目,否则所有未经身份验证的请求都将被重定向。
【解决方案2】:

结果证明解决方案与 SVN 有关。我不得不恢复到该站点正常工作的时间,并从该时间点用最新更新覆盖。有些东西被缓存在某处,我不确定是什么修复了它,但如果您遇到此问题并且没有任何解决方案发布帮助 - 请查看您的源代码管理。

感谢大家的帮助。

更新 svn 只是问题的一部分,它不是 svn 本身 - 而是每个开发人员对项目中某些文件的更改权限。

当我们的计算机名称在周末更改时,问题又出现了。

问题的真正根源是 IIS 的匿名身份验证设置为使用 IUSR,但它应该设置为使用 ApplicationPoolIdentity。

由于 IUSR 的工作方式是附加计算机名称,因此来自 SVN 的文件的权限都设置为我们的旧名称,因此当 IIS 尝试获取具有这些权限的任何内容时,它会失败并被重定向到登录页面 - 甚至在点击 MVC 的路由管理器之前。

更新 2 再次遇到这个问题,这次通过共享访问了我机器上的一些web.config文件,并且这个302事情开始发生。发现上面提到的设置在iis中设置错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2015-10-31
    • 2011-12-15
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多