表单或基本身份验证

时间:2013-01-18 14:25:06

标签: asp.net-mvc authentication

我有一个Windows应用程序需要调用Forms Authenticated MVC操作。问题是,我不知道如何验证从Windows应用程序到Forms Authenticated MVC应用程序的调用。

以下代码返回登录页面。有没有办法允许以下代码以任何方式使用Forms身份验证,或者我是否需要创建一个使用基本身份验证的新Web API项目?

WebRequest req = WebRequest.Create("http://myurl/protectaction");
req.Credentials = new NetworkCredential("username", "password");

var res = req.GetResponse();

非常感谢你的帮助,

理查德休斯

1 个答案:

答案 0 :(得分:3)

您可以使用CookieContainer来存储LogOn操作发出的FormsAuthentication cookie。因此,基本上您将向LogOn操作发送第一个请求,然后为后续请求重用相同的WebRequest实例。

这样,您只需通过电话发送一次凭证。

例如:

var container = new CookieContainer();

var req = (HttpWebRequest)WebRequest.Create("http://myurl/account/logon");
req.CookieContainer = container;
req.Method = "POST";
using (var writer = new StreamWriter(req.GetRequestStream()))
{
    var data = HttpUtility.ParseQueryString(string.Empty);
    data["username"] = "john";
    data["password"] = "secret";
    writer.Write(data.ToString());
}
using (var res = req.GetResponse())
{
    // You could check here if login was successful
}

req = (HttpWebRequest)WebRequest.Create("http://myurl/protectedresource");
req.CookieContainer = container;
using (var res = req.GetResponse())
using (var reader = new StreamReader(res.GetResponseStream()))
{
    string result = reader.ReadToEnd();
    // do something with the protected resource
}