在内部网络上运行代码时出现不需要的代理身份验证问题.代码问题

本文关键字:代码 问题 不需要 代理 身份验证 网络 运行 在内部 | 更新日期: 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>