1

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

我有一个正在开发的 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)?"
                     });


  }
4

2 回答 2

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>
于 2012-09-24T15:14:30.400 回答
2

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

谢谢大家的帮助。

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

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

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

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

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

于 2012-09-24T16:47:54.177 回答