我有一个小难题,我有一个使用基于表单的身份验证的asp.net应用程序.在应用程序内部,我有一个web服务,它检查User.IsInRole(“somerole”),它可以很好地处理来自应用程序的ajax调用,因为用户已登录,并且ajax调用来自他登录的浏览器.
现在,我想让胖客户端调用webservices(c#console client for starters),但是无法弄清楚如何将凭证信息传递给它.
我看过像下面这样的事情无济于事:
SomeWebService svc = new SomeWebService();
svc.Credentials = new NetworkCredential("formsusername","formspassword","");
String returnValue = svc.CallMyWebMethod();
谁能在那里向我展示这个诀窍? 🙂
谢谢!
最佳答案 表单身份验证的工作原理是让客户端在每个请求中发送Cookie.当客户端通过发送正确的凭据成功进行身份验证时,服务器会发出此cookie.
因此,以下是您在控制台应用程序中需要执行的步骤,以便使用表单身份验证对用户进行身份验证:
>向一些传递用户名和密码的网页发送HTTP POST请求.作为响应,Web服务器将为您提供需要捕获的身份验证cookie(Set-Cookie HTTP响应头).这通常是你的日志页面.
>调用Web服务时,您需要传递此cookie(Cookie HTTP请求标头).为了与请求一起设置cookie,您必须覆盖为您生成的客户端代理类上的GetWebRequest方法:
protected override WebRequest GetWebRequest(Uri uri)
{
var request = (HttpWebRequest)base.GetWebRequest(uri);
request.CookieContainer.Add(
new Cookie(
".ASPXAUTH",
"THE VALUE YOU HAVE RETRIEVED WHEN YOU SEND YOUR FIRST LOGON REQUEST"
)
);
return request;
}