在内部网络上运行代码时出现不需要的代理身份验证问题.代码问题
本文关键字:代码 问题 不需要 代理 身份验证 网络 运行 在内部 | 更新日期: 2023-09-27 17:55:09
我编写了一个测试应用程序来针对内部 RESTful 服务验证一些用户详细信息。
如果我直接通过浏览器发出请求,我会得到来自服务的响应,但如果我通过我的代码发出请求,响应会指出我需要代理服务器身份验证。
虽然我可以提供用户可配置的设置以便可以传递代理参数,但它只是感觉错误,我不确定我的代码是否不正确。
下面是失败的代码片段,后跟包含代理详细信息的代码片段。
/// <summary>
/// Validate the user details
/// </summary>
/// <returns>True if the user credentials are valid, else false</returns>
public bool ValidateUser()
{
bool valid = false;
try
{
// Create the XML to be passed as the request
XElement root = BuildRequestXML("LOGON");
// Add the action to the service address
Uri serviceReq = new Uri(m_ServiceAddress + "?obj=LOGON");
// Make the RESTful request to the service using a POST
using (HttpResponseMessage response = new HttpClient().Post(serviceReq, HttpContentExtensions.CreateDataContract(itrent)))
{
// Retrieve the response for processing
response.Content.LoadIntoBuffer();
string returned = response.Content.ReadAsString();
// TODO: parse the response string for the required data
}
}
catch (Exception ex)
{
Log.WriteLine(Category.Serious, "Unable to validate the User details", ex);
valid = false;
}
return valid;
}
现在对于有效但有问题的块...
/// <summary>
/// Validate the user details
/// </summary>
/// <returns>True if the user credentials are valid, else false</returns>
public bool ValidateUser()
{
bool valid = false;
try
{
// Create the XML to be passed as the request
XElement root = BuildRequestXML("LOGON");
// Add the action to the service address
Uri serviceReq = new Uri(m_ServiceAddress + "?obj=LOGON");
// Create the client for the request
using (HttpClient client = new HttpClient())
{
// Create a proxy to get around the network issues and assign it to the http client
WebProxy px = new WebProxy( <Proxy server address>, <Proxy Server Port> );
px.Credentials = new NetworkCredential( <User Name>, <Password>, <Domain> );
client.TransportSettings.Proxy = px;
// Mare the RESTful request
HttpResponseMessage response = client.Post(serviceReq, HttpContentExtensions.CreateDataContract(root));
// Retrieve the response for processing
response.Content.LoadIntoBuffer();
string returned = response.Content.ReadAsString();
// TODO: parse the response string for the required data
}
}
catch (Exception ex)
{
Log.WriteLine(Category.Serious, "Unable to validate the User details", ex);
valid = false;
}
return valid;
}
非常感谢所有建议。干杯。
浏览到服务时,使用的是已登录用户的代理设置。当您尝试通过 Web 服务通过代理时,它可能作为未配置代理设置的 ASP.NET 帐户运行。
你可以
- 根据您的建议提供可配置的代理设置
- 在配置了正确代理设置的帐户下运行 Web 服务(也许使用 Windows 身份验证?
- 尝试将部分添加到您的 web.config
<system.net> <defaultProxy useDefaultCredentials="true"> <proxy usesystemdefault="true"/> </defaultProxy> </system.net>
在这里进行了很好的讨论
把这段代码放到你的app.config上。它应该禁用代理
<system.net>
<defaultProxy
enabled="false"
useDefaultCredentials="false" >
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>