更新!的 所以我以为我已经解决了 - 它又回来了。我的忽略路线似乎被忽略了。每个请求都被重定向:(
我有一个我正在研究的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)?"
});
}
答案 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中设置不正确。