0

この投稿の最後にある最終更新

私は一日中それに取り組んでいます、そして私はそれを機能させることができません:

private void button1_Click(object sender, EventArgs e)
{
    var loginUri = new Uri(@"http://localhost:5898/Account/Login");
    const string strLoginData = "Login=ojejq&Password=ojejqjejq&returnUrl=%2F";

    var cookie = GetAuthCookie(loginUri, strLoginData);
}

public CookieContainer GetAuthCookie(Uri loginUri, string data)
{
    var cookieJar = new CookieContainer();
    var request = (HttpWebRequest)WebRequest.Create(loginUri);
    request.Method = "POST";
    request.CookieContainer = cookieJar;
    request.ContentLength = data.Length;
    request.ContentType = "application/x-www-form-urlencoded";

    var myWriter = new StreamWriter(request.GetRequestStream());
    myWriter.Write(data);
    myWriter.Close();
    request.GetResponse();

    return cookieJar;
}

私のASP MVCアプリケーションでは、/Account/Login POST上記のコードにさえヒットしないコントローラーがあります。私は何が間違っているのですか?

編集:私のasp mvcアプリでの2つのログインアクション:

[AllowAnonymous]
public ActionResult Login()
{...}

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel model, string returnUrl)
{...}

2番目の更新:ログインモデルを追加

public class LoginModel
{
    [Required]
    [Display(Name = "Login", ResourceType = typeof(NameResources))]
    [StringLength(16, ErrorMessageResourceName = "LoginLengthError", ErrorMessageResourceType = typeof(NameResources), MinimumLength = 4)]
    public string Login { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password", ResourceType = typeof(NameResources))]
    [StringLength(32, ErrorMessageResourceName = "PasswordLengthError", ErrorMessageResourceType = typeof(NameResources), MinimumLength = 8)]
    public string Password { get; set; }
}

3番目の更新:web.configにcookieless="AutoDetect"オプションが設定されていることを忘れました。何か変更があるかわかりませんか?

最終更新:まず、お時間をいただきありがとうございます。私を助けようとしたすべての人が賛成票を獲得します。問題はコードではなく、VisualStudio開発サーバーにあることがわかりました。それはどういうわけか私のbutton1POSTリクエストをリダイレクトし、プロセスでデータを失い、そのリクエストをGETリクエストに変更しました。私は知っています、werid、しかしコードは大丈夫でした。お時間をいただきありがとうございます。

4

1 に答える 1

5

「ログイン」ではなく「ユーザー名」を試してみてください。

const string strLoginData = "UserName=ojejq&Password=ojejqjejq&returnUrl=%2F";

そしてこれも試してみてください:

public CookieCollection GetAuthCookie(Uri loginUri, string data)
{
    var cookieJar = new CookieContainer();
    var request = (HttpWebRequest)WebRequest.Create(loginUri);
    request.Method = "POST";
    request.CookieContainer = cookieJar;
    request.ContentLength = data.Length;
    request.ContentType = "application/x-www-form-urlencoded";

    var myWriter = new StreamWriter(request.GetRequestStream());
    myWriter.Write(data);
    myWriter.Close();

    var webResponse = request.GetResponse() as HttpWebResponse;
    return webResponse.Cookies;
}
于 2012-10-09T19:53:58.220 に答える