我在这里面临一个问题,用HttpListener。
当形式的请求
http://user:password@example.com/
由,我怎么能得到的用户名和密码? HttpWebRequest的有凭证的财产,但HttpListenerRequest没有它,我没有发现它的任何属性的用户名。
谢谢您的帮助。
我在这里面临一个问题,用HttpListener。
当形式的请求
http://user:password@example.com/
由,我怎么能得到的用户名和密码? HttpWebRequest的有凭证的财产,但HttpListenerRequest没有它,我没有发现它的任何属性的用户名。
谢谢您的帮助。
什么你试图做的是通过通过HTTP凭证基本身份验证,我不知道如果用户名:密码语法在HttpListener支持,但如果是这样,你需要指定您接受基本身份验证第一。
HttpListener listener = new HttpListener();
listener.Prefixes.Add(uriPrefix);
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
一旦你收到一个请求,然后你可以提取与用户名和密码:
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
这里有一个全面的解释的,可以用HttpListener使用所有支持authenitcation方法。
获得Authorization
头。 它的格式如下
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
例:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
用户名和口令是冒号分隔(在这个例子中, Aladdin:open sesame
),然后B64编码。
首先,您需要启用基本身份验证:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
然后在您的ProcessRequest方法,你可以得到的用户名和密码:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}