1

这是一个奇怪的问题。当我达到这一点时,他们总是如此。

我有一个 MVC 应用程序。这是一个单页应用程序,因此所有路由都是 ajax 调用,但我认为这无关紧要。

奇怪的是,突然之间,一个特定的页面开始给我一个 401 并提示我输入信用。实际上,这两个页面都在这个 MVC 区域中。它只在本地进行,所以我无法调试。它只是在最后一次推动之后才开始的。其他页面都没有这样做。

因此,我通过 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 页面,我重定向到一个带有 reportviewer 的 aspx 页面。但是您必须单击一个按钮,然后您的 window.locationed 就结束了。不可能跟那个有关系。

二是我在qa服务器上从sqlserver试用版升级到sqlserver标准版。

这就是我得到的。完全糊涂了。

任何想法都会很棒。

谢谢,

拉伊夫


编辑\修复\黑客:

好吧,这要么令人困惑,要么令人愤怒。现在说还为时过早。

我的 MVC 区域,正在破坏的区域,它被命名为“报告”,因为它充满了报告。在做了一些 hail mary 测试后,我将区域名称更改为 Reportsx,现在它就像一个梦一样工作。因为如果区域名称是 Reports,我当然从来没有告诉堆栈的任何部分要求凭据,我只能假设有一些 IIS 设置或 MVC 设置表明如果 url 是 xxx/Reports 则需要凭据。

我对其他观点持开放态度。

4

1 回答 1

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>

其中第一行中作为路径值的“某物”可以是“Assets/CSS”之类的路径,也可以是“Login.aspx”之类的页面。您会注意到身份验证模式有多种设置。

现在,如果 QA 服务器上的 Web.config 提到名为“Reports”的内容并指定它需要特定的身份验证模式,那么未能为该模式提供合适的凭据将导致 401。将名称更改为“Reportsx”可能只是意味着它再也找不到匹配的条目,因此退回到默认模式,这显然可以让人们进入。

因此,请尝试检查服务器的 Web.config 中提到“某事/报告”的部分,并查看它们需要什么身份验证。

于 2013-02-07T16:03:35.997 回答