就像标题所说的那样,用户使用基本身份验证通过SSL登录并调用WebService方法,我想提取auth标头并在方法函数中使用username参数。是否有一种简单的方法可以内联(在Method本身内),或作为单独项目中的Class方法?
.NET 4.5,IIS 7.5
由于
经过一番搜索,我发现了一些应该做我想做的代码:
string authHeader = WebClient.Headers[HttpRequestHeader.Authorization];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
但是编译Visual Studio错误时:非静态字段,方法或属性需要对象引用&System; Net.Net.WebClient.Headers.get'。
我知道一旦我可以填充authHeader字符串,其他一切都会按预期工作,但我很难获得实际的标头值。
答案 0 :(得分:0)
终于找到了适用于我们的解决方案,希望没有人发现它有任何重大问题,但如果你这样做,请分享。
private string username
{
get{
HttpContext ctx = HttpContext.Current;
string authHeader = ctx.Request.Headers["Authorization"];
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
return usernamePassword.Substring(0, seperatorIndex);
}
}
这似乎解决了我们的问题,我们并不想将用户名分别发送到标题,因为它会允许某人更改用户名参数而不影响他们登录的帐户,这样帐户他们登录的是我们用来创建链接的帐户,它可以运行。