【问题标题】:Mvc action returns 401 errorMvc 操作返回 401 错误
【发布时间】:2013-02-07 01:07:30
【问题描述】:

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

我有一个 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 trial升级到sqlserver standard。

这就是我的全部。完全糊涂了。

任何想法都会很棒。

谢谢,

雷夫


编辑\修复\黑客:

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

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

我愿意接受其他观点。

【问题讨论】:

  • 我假设在 QA 中使用了不同的 web.config。可能值得检查没有通过这种方式无法访问的位置。
  • 您可以尝试为您的显示模板创建一个 Layout=null 的空白视图,并使用它来确定您的操作或您的视图是否是问题并从那里开始工作。
  • 您有没有机会在您的 QA 服务器上安装/托管 SSRS?
  • 哇 - 我刚来到这个页面,很惊讶你的控制器名称是 Reports - SO IS MINE!!!我也有同样的问题,我想不通。
  • 我刚刚遇到了同样的问题,感谢@Peter 的评论,我还能够将 SSRS 确定为原因。您可以使用 Reporting Services 配置管理器来限制 SSRS URL 过滤器devio.wordpress.com/2016/01/15/…

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


【解决方案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 提及名为“报告”的内容并指定它需要特定的身份验证模式,则未能为该模式提供合适的凭据将导致 401。将名称更改为“ Reportsx" 可能只是意味着它无法再找到匹配的条目,因此退回到默认模式,这显然可以让人们进入。

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

【讨论】:

  • 感谢您的建议。这是一个非常小的(到目前为止)绿色项目,我的 dev、qa 和 prod 设置尽可能相似。事实上,我可以复制并过去我的 web.config,因为它引用了一个 appsettings.config 文件,而我确实保持不变(尽管它非常相似)。所以我认为这不是问题,但它确实有道理。关于 ssrs 的原始帖子有评论,我认为这就是痛苦所在。如果有兴趣,请参见上文。
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2020-09-04
相关资源
最近更新 更多