IIS 8没有在ASP.NET Webpages Razor网站中恢复POST数据

时间:2016-03-22 16:20:40

标签: asp.net vb.net iis post razor

我有一个ASP.NET网站,它在今天早上一直运行良好。 我的所有用户都无法登录!

我花了一天时间试图用很少的运气来追捕这个问题。

现在,我已将问题缩小到IIS,不接受POST数据。

每次用户POST时都会输入用户名和密码它会为数据的Request.Form部分返回NULL。

在我的Dev机器上,它的工作方式与以往一样。我甚至可以使用Request.Form.Allkeys向我显示所有正在发送的数据。

我使用了谷歌Chrome浏览器的开发人员工具,以检查POST请求是否实际发送,是的,它与数据并列。

似乎IIS根本没有接受任何内容或者根本没有保留POST数据,因为我的ASP.NET代码选择了它

这是我的登录表单:

<section id = "loginForm" >
    <form name="mainLog" method="post">
        @* If one or more validation errors exist, show an error *@
        @Html.ValidationSummary("Log in was unsuccessful. Please correct the errors and try again.", excludeFieldErrors:=True, htmlAttributes:=Nothing)
        <fieldset>
            <legend>Sign in to Your Account</legend>
            <ol>
                <li class="email">
                    <label for="email" @If Not ModelState.IsValidField("username") Then @<text> class="error-label" </text>  End If>Username</label>
                    <input type="text" id="username" name="username" />
                    @* Write any user name validation errors to the page *@
                    @Html.ValidationMessage("username")
                </li>
                <li class="password">
                    <label for="password" @If Not ModelState.IsValidField("password") Then @<text> class="error-label" </text>  End If>Password</label>
                    <input type="password" id="password" name="password" />
                    @* Write any password validation errors to the page *@
                    @Html.ValidationMessage("password")
                </li>
                <li class="remember-me">
                    <input type="checkbox" id="rememberMe" name="rememberMe" value="true" checked="@rememberMe" />
                    <label class="checkbox" for="rememberMe">Remember me?</label>
                </li>
            </ol>
            <input type="submit" value="Log in" />
        </fieldset>
    </form>
</section>

以下部分显示了我获取此POST数据的位置:

If (IsPost) Then
        If Validation.IsValid() Then
            ' Attempt to log in using provided credentials


            'Recive username and password from form
            username = Request.Form("username")
            password = Request.Form("password")

在我的本地开发框中,这是绝对正常的,用户名和密码被接收和处理。但是在我的实时IIS 8服务器上,它们总是以null形式出现,并且没有数据键。

以下是请求的示例(在BASH中):

-H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: ' -H 'Connection: keep-alive' -H 'DNT: 1' --data 'username=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' --compressed

正在发送用户名数据,但Request.Form.AllKeys根本没有显示任何数据!

就像我提到的,在本地,我没有这样的问题

任何帮助都会让我的网站重新上线真的很感激!

1 个答案:

答案 0 :(得分:0)

我终于发现了IIS服务器的问题!

在我的网络服务器上,我有一个名为ModSecurity Installed的工具,显然是在干扰我的POST请求。

通过将该行[{1}}添加到网站的<ModSecurity enabled="false" />中,所有内容都会恢复到原始状态。

我希望将来能帮助其他人解决这个问题