Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将NetworkCredential从ASP.Net页面传递到C#中的HttpWebRequest_Asp.net_Http_Httpwebrequest - Fatal编程技术网

将NetworkCredential从ASP.Net页面传递到C#中的HttpWebRequest

将NetworkCredential从ASP.Net页面传递到C#中的HttpWebRequest,asp.net,http,httpwebrequest,Asp.net,Http,Httpwebrequest,我试图使用HTTPWebRequest访问web服务,但传入凭据时遇到问题,请参阅下面的代码。我可以在调试器中看到正在生成的凭据对象nc,也可以在request.credentials的赋值中看到,但是当我到达最后一行代码时,它会出现错误,并显示一条未授权的错误消息。我让我们的服务器人员在服务器上监视请求,但没有传递任何凭据。我是不是对Credentials对象做了一些错误的事情,或者我需要做一些我在这里没有做的事情 Uri requestUri = null; Uri.TryCreate("h

我试图使用HTTPWebRequest访问web服务,但传入凭据时遇到问题,请参阅下面的代码。我可以在调试器中看到正在生成的凭据对象nc,也可以在request.credentials的赋值中看到,但是当我到达最后一行代码时,它会出现错误,并显示一条未授权的错误消息。我让我们的服务器人员在服务器上监视请求,但没有传递任何凭据。我是不是对Credentials对象做了一些错误的事情,或者我需要做一些我在这里没有做的事情

Uri requestUri = null;
Uri.TryCreate("https://mywebserver/webpage"), 
    UriKind.Absolute, out requestUri);

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create
    (requestUri);

NetworkCredential nc =
    new NetworkCredential("user", "password");

request.Credentials = nc;

request.Method = WebRequestMethods.Http.Get;
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Microsoft Premier支持通过使用CredentialCache类添加凭据和“基本”授权,最终帮助我解决了此问题:

NetworkCredential nc =
    new NetworkCredential(GetSetting("username"), GetSetting("password"));
CredentialCache cache = new CredentialCache();

cache.Add(requestUri, "Basic", nc);

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);

网络认证要么非常不直观,要么不可靠,要么两者兼而有之。无论如何,您可以通过完全绕过NetworkCredentials并使用此方法来解决此问题(我发现了此方法,由mark.michaelis.net提供)

因此,您要做的是手动为HttpWebRequest创建一个标头,并插入内容,就像它在基本身份验证标头中显示的那样。工作起来很有魅力。

它帮助了我(对于Unity3d mono,而不是ASP.Net):


不需要手动设置授权标题或使用CredentialCache。

您是否使用Fiddler亲自查看您传递的内容?我不喜欢依赖服务器人员来评估这样的事情:)JustLoren-我不知道Fiddler,直到你发布了这条评论,我下载了它,在Auth选项卡下,它说没有代理授权头。不存在授权标头,因此我仍然认为我的代码有问题。是否有原因不生成代理类来调用内部web服务?是的,我调用的服务是REST服务,因此没有wsdl文件。如果不使用ss l,密码将以明文形式传输?非常好,这一个有效,被接受的答案对我不起作用。
/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */
byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password);
req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);
request.PreAuthenticate = true;