如何验证ASP.NET MVC应用程序的用户(使用用户名和密码)?我正在尝试使用WebClient
执行此操作,传递NetworkCredentials
,将请求从我的WPF客户端发布到ASP.NET MVC应用程序。如何在服务器上处理此请求?我如何获得通过的用户名和密码?
我在ASP.NET MVC应用程序中使用表单身份验证(使用新项目创建的默认值)。
答案 0 :(得分:5)
表单身份验证分两步进行:
因此,要在WPF应用程序中实现此目的,您需要首先获取身份验证cookie。因此,首先向LogIn页面发送POST请求以及用户名和密码,并读取返回的cookie(为此,您需要在HttpWebRequest上设置CookieContainer属性,以便能够捕获cookie)。获得cookie后,您可以在后续调用经过身份验证的页面中重用cookie容器。
您可以结帐this sample code来帮助您(只需更换地址和参数名称)。
答案 1 :(得分:1)
这段代码对我有用,使用Darin的方法和链接中的WebClientEx类。 我的WPF表单必须对MVC应用程序进行身份验证,并将返回的身份验证cookie的名称和值存储在静态属性CookieName和CookieValue中。然后,CreateUser()函数可以访问MVC应用程序中的安全操作。
//************************************************
//************************************************
private void Authenticate(object sender, RoutedEventArgs e)
{
using (var client = new WebClientEx())
{
var values = new NameValueCollection
{
{ "UserName", "xxx" },
{ "Password", "yyy" },
};
var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Account/Login", values);
var responseString = Encoding.ASCII.GetString(byteResponse); //debugging
CookieCollection authCookie = client.CookieContainer.GetCookies(new Uri("http://localhost/"));
if (authCookie.Count > 0)
{
CookieName = authCookie[0].Name;
CookieValue = authCookie[0].Value;
}
}
}
//************************************************
//************************************************
private void CreateUser(object sender, RoutedEventArgs e)
{
using (var client = new WebClientEx())
{
var user = new NameValueCollection
{
{"FirstName" , "Xavier"},
{"LastName" , "McLann"},
{"EmailAddress" , "xavier@aol.com"},
{"Phone" , "234445585"}
};
if (!String.IsNullOrEmpty(CookieName) && !String.IsNullOrEmpty(CookieValue))
client.CookieContainer.Add(new Cookie(CookieName, CookieValue,"/","localhost"));
var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Home/Create", user);
var responseString = Encoding.ASCII.GetString(byteResponse); //debugging
}
}