302重定向似乎在mvc路由之前发生。帮助调试重定向

时间:2012-09-24 14:47:13

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

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

我有一个我正在研究的MVC网站,其中大部分是在EXTJS中,所以他们只使用一个控制器,主页和登录视图。相当标准的设置 - 这在上周工作,在Home控制器上调用Index操作,它立即被重定向到登录操作。好的 - 很好,这是预期的行为。

只有现在,每个链接文件,css或javascript都会重定向回相同的登录页面。例外情况是通过休息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)?"
                     });


  }

2 个答案:

答案 0 :(得分:3)

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

你的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>

答案 1 :(得分:2)

这个解决方案原来与SVN有关。我不得不恢复到该网站工作的时间,并使用最新更新覆盖该点。有些东西被缓存了,我不确定是什么修复它,但是如果遇到这个问题并且没有任何解决方案发布帮助 - 请查看源代码控制。

感谢大家的帮助。

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

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

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

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

更新2 再次遇到这个问题,这次通过共享它们在我的机器上访问了一些web.config文件,这件事开始发生了。它显示上面提到的设置在iis中设置不正确。