現在、ASP.NET MVC3のWebサイトで作業しています。MVC3 - フォーム+ POST =空のパラメーター
私はシンプルなビューモデルにバインドされた簡単な認証フォームを持っています。ローカルでデバッグするときは、すべて正常に動作します。
しかし、ウェブサイトはApache +モノモードでも動いていなければなりません。そして、ここで私が遭遇する奇妙な振る舞いがあります。同じ要求とパラメータを持つ同じ形式が動作しています。
詳細:
のviewmodel:
/// <summary>
/// Form authentication info
/// </summary>
public class LogOnModel
{
/// <summary>
///
/// </summary>
[DisplayName("Username")]
public string UserName { get; set; }
/// <summary>
///
/// </summary>
[DisplayName("Password")]
public string Password { get; set; }
/// <summary>
///
/// </summary>
[DisplayName("Remember me?")]
public bool RememberMe { get; set; }
/// <summary>
/// Targeted URL
/// </summary>
public string Target { get; set; }
/// <summary>
///
/// </summary>
public LogOnModel()
{
}
}
ビューの主要部分、ユーザーはそのユーザー名とパスワードを入力することができますページ:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Website.Areas.Public.Models.LogOnModel>" %>
<p>
Please enter your username and password to continue.
</p>
<% using (Html.BeginForm())
{ %>
<%= Html.ValidationSummary(true, "Authentication failed.")%>
<p>
<%= Html.ActionLink("I forgot my password","PasswordRecovery","Home") %>
</p>
<div>
<fieldset>
<div class="editor-label">
<%= Html.LabelFor(m => m.UserName) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.UserName) %>
<%= Html.ValidationMessageFor(m => m.UserName)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(m => m.Password)%>
</div>
<div class="editor-field">
<%= Html.PasswordFor(m => m.Password) %>
<%= Html.ValidationMessageFor(m => m.Password) %>
</div>
<div class="editor-field">
<%= Html.CheckBoxFor(m => m.RememberMe) %>
Remember me
</div>
<p>
<input type="submit" value="Connect me!" />
</p>
</fieldset>
</div>
<% } %>
コントローラは、認証情報を受け取っています:
[HttpPost]
public ActionResult LogOn(LogOnModel model)
{
string username = model.UserName;
string password = model.Password;
//On Apache, username & password are empty
...
}
私がコメントで言うように、ユーザ名&パスワードは空です。ローカルのASP.NETデバッグサーバーではすべて正常に動作しています。フィドラーを使用すると、認証要求にフォームデータ(ユーザー名、パスワードなど)が含まれていることがわかります。
なぜバインディングが機能していないようですか?おかげさまで
HttpContext.Request.Form ["UserName"]などを使用して値を取得できます...しかし、それは私にとって非常にきれいではありません... – Valryon