我有一个小难题,我有一个使用基于表单的身份验证的asp.net应用程序。在应用程序内部,我有一个检查User.IsInRole(“somerole”)的web服务,它可以很好地处理来自应用程序的ajax调用,因为用户已登录,并且ajax调用来自他登录的浏览器。
现在,我想让胖客户端调用webservices(c#console client for starters),但是无法弄清楚如何将凭证信息传递给它。
我看过像下面这样的事情无济于事:
SomeWebService svc = new SomeWebService();
svc.Credentials = new NetworkCredential("formsusername","formspassword","");
String returnValue = svc.CallMyWebMethod();
那里的任何人都可以向我展示这个诀窍吗? : - )
谢谢!
答案 0 :(得分:2)
表单身份验证的工作原理是让客户端在每个请求中发送Cookie。当客户端通过发送正确的凭据成功进行身份验证时,服务器会发出此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;
}