我有一个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();
非常感谢你的帮助,
理查德休斯
答案 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
}