我在这里面临一个问题,使用HttpListener。
当表格的请求
时http://user:password@example.com/
制作完成后,如何获取用户名和密码? HttpWebRequest有一个Credentials属性,但是HttpListenerRequest没有它,我没有在它的任何属性中找到用户名。
感谢您的帮助。
答案 0 :(得分:21)
您尝试做的是通过HTTP基本身份验证传递凭据,我不确定HttpListener是否支持username:password语法,但如果是,则需要指定您接受基本身份验证第一
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方法的
答案 1 :(得分:4)
获取Authorization
标题。它的格式如下
Authorization: <Type> <Base64-encoded-Username/Password-Pair>
示例:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
用户名和密码是冒号分隔的(在此示例中为Aladdin:open sesame
),然后是B64编码。
答案 2 :(得分:2)
您需要先启用基本身份验证:
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
然后在您的ProcessRequest方法中,您可以获得用户名和密码:
if (context.User.Identity.IsAuthenticated)
{
var identity = (HttpListenerBasicIdentity)context.User.Identity;
Console.WriteLine(identity.Name);
Console.WriteLine(identity.Password);
}