Mvc操作返回401错误

时间:2013-02-07 01:07:31

标签: c# asp.net-mvc asp.net-mvc-areas http-status-code-401

这是一个奇怪的。他们总是在我达到这一点时。

我有一个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然后要求信用。

我愿意接受其他观点。

1 个答案:

答案 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以查找提及“某事/报告”的部分,并查看他们需要的身份验证。