Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP MVC+;获取身份验证cookie的HttpWebRequest应用程序,如何强制其工作?_C#_Asp.net Mvc_Httpwebrequest - Fatal编程技术网

C# ASP MVC+;获取身份验证cookie的HttpWebRequest应用程序,如何强制其工作?

C# ASP MVC+;获取身份验证cookie的HttpWebRequest应用程序,如何强制其工作?,c#,asp.net-mvc,httpwebrequest,C#,Asp.net Mvc,Httpwebrequest,本文结尾处的最终更新 我整天都在工作,但我不能让它工作: 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

本文结尾处的最终更新

我整天都在工作,但我不能让它工作:

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应用程序中的两个登录操作:

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

第二次更新:添加了登录模型

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; }
}
第三个更新:我忘了提到,在我的web.config中设置了cookieless=“AutoDetect”选项。我不知道它有没有变化

最终更新:首先,感谢大家抽出时间,所有试图帮助我的人都获得了投票权。我发现问题不在代码中,而是在我的VisualStudio开发服务器中。它以某种方式重定向了我的按钮1POST请求,在过程中丢失了数据,并将该请求更改为GET请求。我知道,werid,但代码还可以。谢谢您的时间。

我认为您应该在以下位置尝试“用户名”而不是“登录”:

也试试这个:

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;
}
我认为您应该在以下位置尝试“用户名”而不是“登录”:

也试试这个:

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;
}


您可以添加控制器操作的签名吗?(帐户/登录)
[AllowAnonymous]public ActionResult Login()
[HttpPost][AllowAnonymous]public ActionResult Login(LoginModel模型,字符串返回URL)
button1的代码是一个标准的c应用程序,用于从我的另一个asp mvc获取auth cookieapp@Erwin,我的按钮1代码只点击GET login操作,它应该只点击POST一个…
cookieJar
是请求的
CookieContainer
,而不是响应。您需要捕获从
GetReponse
返回的响应,并检查其中的cookie。您可以添加控制器操作的签名吗?(帐户/登录)
[AllowAnonymous]public ActionResult Login()
[HttpPost][AllowAnonymous]public ActionResult Login(LoginModel模型,字符串返回URL)
button1的代码是一个标准的c应用程序,用于从我的另一个asp mvc获取auth cookieapp@Erwin,我的按钮1代码只点击GET login操作,它应该只点击POST一个…
cookieJar
是请求的
CookieContainer
,而不是响应。您需要捕获从
GetReponse
返回的响应,并检查那里的cookie。好吧,这应该会命中他的控制器方法(假设他的LogInModel有一个名为UserName的属性),但这不会使完整的代码工作。实际上,它对我有效,它返回了一个带有“\uu RequestVerificationToken”的cookie,对吗,我对第一个答案做了评论(没有GetAuthCookie()代码段)。我想现在应该行了,你拿到我的+1@YasserSinjab,您所做的唯一更改是
var webResponse=request.GetResponse()作为HttpWebResponse对吗?因为它仍然没有影响到我的[帖子]动作-/好的,我会告诉你我做了什么。我保留“AccountController”作为默认值,但我在HttpPost“Login”方法中注释了“[ValidateAntiForgeryToken]”属性。然后我创建WPF应用程序,然后复制代码,粘贴它,就这样:)好吧,这应该会命中他的控制器方法(假设他的LogInModel有一个名为UserName的属性)但它不能使完整的代码正常工作。实际上,它对我有效,它返回了一个带有“\uu RequestVerificationToken”的cookie。对,我对第一个答案做了评论(没有GetAuthCookie()代码段)。我想现在应该行了,你拿到我的+1@YasserSinjab,您所做的唯一更改是
var webResponse=request.GetResponse()作为HttpWebResponse对吗?因为它仍然没有影响到我的[帖子]动作-/好的,我会告诉你我做了什么。我保留“AccountController”作为默认值,但我在HttpPost“Login”方法中注释了“[ValidateAntiForgeryToken]”属性。然后我创建WPF应用程序,然后复制代码,粘贴它,就这样:)
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;
}