这是一个奇怪的。他们总是在我达到这一点时。
我有一个MVC应用程序。这是一个单页应用程序,因此所有路由都是ajax调用,但我不认为这是相关的。
奇怪的是,突然间,一个特定的页面开始给我一个401并提示输入信用。实际上它是这个MVC区域中的两个页面。它只在qa中没有在本地执行,所以我无法调试。它只是在最后一次推动后才开始。其他页面都没有这样做。
所以我通过fiddler比较了成功页面的标题和网站上的401页面。 除了网址之外,确实是相同的怪胎。 行动
401的行动
public ActionResult Display_Template(ViewModel input)
{
return this.View("Display", new TasksByFieldViewModel());
}
为200
public ActionResult AddUpdate_Template(ViewModel input)
{
return View("VendorAddUpdate", new VendorViewModel());
}
唯一的变化就是这个,这没有任何意义。
从401页面,我重定向到一个aspx页面,上面有一个reportviewer。但是你必须单击一个按钮,然后你就是window.locationed了。它不可能与此有任何关系。
第二个是我在qa服务器上从sqlserver trial升级到sqlserver标准。
这就是我得到的全部。完全糊涂了。
任何想法都会很棒。
谢谢,
RAIF
修改\修复\哈克:
好吧,这要么是令人困惑,要么是激怒。现在说还为时过早。
我的MVC区域,正在破碎,它被命名为“报告”,因为它充满了报告。在进行了一些冰雹玛丽测试后,我将区域名称更改为Reportsx,现在它就像一个梦想。如果区域名称是报告,我当然从未告诉堆栈的任何部分要求凭证我只能假设有一些IIS设置或MVC设置,说明如果网址是xxx / Reports然后要求信用。
我愿意接受其他观点。
答案 0 :(得分:1)
如果您工作的地方的系统与我工作的系统类似,那么当您说“在QA中”时,您的意思是您已将代码放在服务器上供测试人员查看。现在,当我第一次来到这里时,我被告知要留下某些现有的配置文件,因为我在这台服务器上找到它们,因为更改会引入特定于我的机器并破坏的东西。我猜你有类似的策略,因此已将新页面部署到服务器,但仅留下该服务器的Web.config。但是,在Web.config中,有一个完整的部分列表,如下所示:
<location path="something">
<formsAuthenticationWrapper enabled="false"/>
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true"/>
<anonymousAuthentication enabled="false"/>
</authentication>
</security>
</system.webServer>
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
其中“something”作为第一行中的路径值可以是像“Assets / CSS”这样的路径,也可以是像“Login.aspx”这样的页面。您会注意到auth模式有各种设置。
现在,如果QA服务器上的Web.config提到称为“Reports”的内容并指定它需要特定的auth模式,那么无法为该模式提供合适的凭据将导致401.将名称更改为“ Reportsx“可能只是意味着它无法再找到匹配的条目,因此又回到了默认模式,这显然让人们进入。
因此,请尝试检查服务器的Web.config以查找提及“某事/报告”的部分,并查看他们需要的身份验证。