【问题标题】:How can I stop my pop-up from prompting for credentials after publishing to the server in MVC?在 MVC 中发布到服务器后,如何阻止弹出窗口提示输入凭据?
【发布时间】:2019-06-17 14:54:15
【问题描述】:

我有一个在 MVC 中完成的项目,在该项目中,在某些显示数据库表的视图上,用户将能够单击给定行中的按钮来编辑该数据。单击按钮时,将出现一个弹出窗口,用户可以在其中编辑数据。值得注意的是,当我在本地运行它时,我没有任何问题。

但是,一旦我将其发布到我的网络服务器,问题就开始了。对网站进行身份验证后,预期结果是不应再次提示我输入我的凭据。如果我只是浏览不同的视图,这个结果是正确的。但是,一旦我单击该按钮以弹出一个窗口,我就会看到一个无限循环的询问凭据。即使我输入了我的凭据,它也会再次询问,没有任何错误。

一旦我在登录网站时已经通过了凭据,我什至不应该首先被要求提供凭据。为什么会这样?

我尝试过使用项目设置和 IIS 上的设置,但无济于事。目前,对于该项目,我有以下设置:

  • 匿名身份验证:启用托管
  • 管道模式:集成
  • 启用 SSL:错误
  • Windows 身份验证:已启用

在 IIS 上,我配置了以下设置:

  • .Net 授权规则:允许所有用户继承
  • 身份验证:匿名和 Windows 均已启用
  • 授权规则:允许所有用户
  • SSL 设置:接受客户端证书

对于弹出窗口本身,我只是使用了一个模态对话框,如下:

查看

Index.cshtml

<table>
@foreach (var item in Model)
    <tr>
            <td>
                <button class="btn btn-primary" onclick="ActionAway(@item.AID)">Action Event</button>
            </td>
    </tr>
    }
        </tbody>
</table>

<div class="modal fade" id="myModal1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <a href="#" class="close" data-dismiss="modal">&times;</a>
                <h3 class="modal-title">Action This Event</h3>
            </div>
            <div class="modal-body" id="myModalBodyDiv1">

            </div>
        </div>
    </div>
</div>
</div>

<script>
    var ActionAway = function (theid) {
        var url = "/Database/Edit?id=" + theid;

        $('#myModalBodyDiv1').load(url, function () {
            $('#myModal1').modal("show");
        })
    }

</script>

我相信这与如何在服务器上设置 IIS 有关,因为它在本地对我来说工作得很好。我可能会错过什么导致这个问题?感谢您对此提出的任何建议!

【问题讨论】:

  • 为什么同时启用匿名和 Windows 身份验证?任选其一。
  • 根据您的建议,我更改为 Windows 身份验证并禁用匿名。不幸的是,这并没有解决我的问题。需要注意的一件有趣的事情是,当我访问该网站时,我可以选择一个证书,然后轻松查看内容。但是对于按钮,它不仅要求提供证书,还要求提供随附的密码。我还可以查看什么来解决我的问题?
  • 在 IIS 应用程序池中设置的帐户也必须在数据库中具有权限。例如,如果应用程序池正在使用自定义用户帐户,则同一帐户必须在 db 中具有读/写权限。我经常忘记设置,可能值得一看。
  • 我不太确定我理解你的意思,BattlFrog。应用程序在 web.config 文件中有一个连接字符串,用于对数据库进行身份验证,它可以使用它来读取/写入信息。除此之外,我实际上可以在我的一个不使用弹出窗口的页面中编辑数据库中的信息。我在同一台服务器上有其他应用程序似乎工作得很好;他们只是不使用弹出窗口!
  • 您的操作或控制器/Database/Edit 是否使用 AuthorizeAttribute 进行了修改?您能否验证登录后您就是您本人而不是匿名用户

标签: asp.net asp.net-mvc iis


【解决方案1】:

经过大量故障排除后,我找到了解决方案。问题在于我的部分。具体来说,这一行:

var url = "/Database/Edit?id=" + theid;

这在本地工作得很好,但是一旦我将它发布到服务器,我不得不将其更改为以下内容:

var url = "//server/application/Database/Edit?id=" + theid;

我确信有一种更简单的方法可以做到这一点,但这是我目前找到的解决方案。感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2013-02-17
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多