How to use proxy server in .net application

by Virender
September 16, 2015

 

Keywords – How to use proxy server in .net application, use proxy in .net application, configuration of proxy in asp.net 

Proxy server is use to distribute internet in secure way.  Proxy server acts as an intermediary for requests from clients seeking resources from other servers or Internet. Many organic use proxy server to stop direct access to outside resource .

If  you have application which have a logic to call external API. But due to proxy we can’t call API directly. So, We need to enable proxy settings in our application to call external API.

We have two ways to configure proxy in .net application.

1. Setup proxy in web.config

2. Use “WebProxy” class for enable proxy

Setup proxy in web.config

You can use following code into web.config to use proxy.  Use proxyaddress to define proxy server path. here our proxy server address is “192.168.1.121:6588”.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<!--start proxy setting-->
  <system.net>
    <defaultProxy enabled="true"   useDefaultCredentials="true" >
      <proxy
        usesystemdefault="True"
        proxyaddress="http://192.168.1.121:6588"
        bypassonlocal="True"/>
      <bypasslist>
        <add address="[a-z]+.bypasslist.com" />
        <!--Provides a set of regular expressions that describe addresses that do not use the proxy. Localhost,Local IP address is best example of bypass list-->
      </bypasslist>
    </defaultProxy>
  </system.net>
  <!--end proxy setting-->
<!--start proxy setting-->
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy
usesystemdefault="True"
proxyaddress="http://192.168.1.121:6588"
bypassonlocal="True"/>
<bypasslist>
<add address="[a-z]+.bypasslist.com" />
<!--Provides a set of regular expressions that describe addresses that do not use the proxy. Localhost,Local IP address is best example of bypass list-->
</bypasslist>
</defaultProxy>
</system.net>
<!--end proxy setting-->


defaultproxy settings

enabled    –    It specify that web proxy is enable or disable. The Default value is true.

useDefaultCredentials    –    It use for specify credentials for web proxy. The default value is false.

proxy settings

bypasslist – It use to specify addresses which not use proxy in regular expressions.

module – Use to specify new new proxy module to the application.

proxy – Use to  define a proxy server Settings

Like -usesystemdefault , proxyaddress, bypassonlocal

Use “WebProxy” class for enable proxy

Just add following keys into appSettings in web.config file. And enable/disable proxy to use inside code.

01
02
03
04
05
06
07
08
09
10
11
<appSettings>
     
    <add key="handleProxyInCode" value="true"/>
    <add key="proxyServerIPAddress" value="192.168.1.12"/>
    <add key="proxyServerPort" value="6588"/>
    <add key="proxyUseCustomNetworkCredential" value="true"/>
    <add key="proxyNetworkCredentialUserName" value="userName"/>
    <add key="proxyNetworkCredentialPassword" value="password"/>
    <add key="proxyNetworkCredentialDomain" value="domain"/>
   
</appSettings>
<appSettings>

<add key="handleProxyInCode" value="true"/>
<add key="proxyServerIPAddress" value="192.168.1.12"/>
<add key="proxyServerPort" value="6588"/>
<add key="proxyUseCustomNetworkCredential" value="true"/>
<add key="proxyNetworkCredentialUserName" value="userName"/>
<add key="proxyNetworkCredentialPassword" value="password"/>
<add key="proxyNetworkCredentialDomain" value="domain"/>

</appSettings>


We are using WebProxy  class in “ProxyFromCode” API

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Http;
namespace WebProxyTest.API
{
    [RoutePrefix("API/WebProxyTest")]
    public class WebProxyController : ApiController
    {
        /// <summary>
        /// Test proxy settings from web.config
        /// </summary>
        ///
        [Route("Test1")]
        [HttpGet]
        public IHttpActionResult ProxyFromConfig()
        {
            string url = @"http://jsonip.com";
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.ContentType = "application/json";
            var response = request.GetResponse();
            StreamReader responsestream = new StreamReader(response.GetResponseStream());
            return Json( responsestream.ReadToEnd());
        }
        /// <summary>
        /// Test proxy settings to handle from code
        /// </summary>
        [Route("Test2")]
        [HttpGet]
        public IHttpActionResult ProxyFromCode()
        {
            string url = @"http://jsonip.com";
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.ContentType = "application/json";
            //check that "handleProxyInCode" is true in web.config file
            bool enableProxyInCode = Convert.ToBoolean(ConfigurationManager.AppSettings["handleProxyInCode"]);
            //run this code when "handleProxyInCode" is true
            if (enableProxyInCode)
            {
                // Fetch proxy server settings from AppSettings section of Web.Config file
                string proxyServerAddress = ConfigurationManager.AppSettings["proxyServerIPAddress"];
                int proxyServerPort = Convert.ToInt16(ConfigurationManager.AppSettings["proxyServerPort"]);
                // Set proxy credentials from web.config file
                WebProxy proxy = new WebProxy(proxyServerAddress, proxyServerPort);
                proxy.Credentials = GetNetworkCredentialForProxy();
                request.Proxy = proxy;
            }
            var response = request.GetResponse();
            StreamReader responsestream = new StreamReader(response.GetResponseStream());
            return Json(responsestream.ReadToEnd());
        }
        /// <summary>
        /// Return network credential for proxy from web.config file
        /// </summary>
        /// <returns> <typeparamref name="ICredentials"/></returns>
        private ICredentials GetNetworkCredentialForProxy()
        {
            bool proxyUseCustomNetworkCredential = Convert.ToBoolean(ConfigurationManager.AppSettings["proxyUseCustomNetworkCredential"]);
            if (proxyUseCustomNetworkCredential)
            {
                string userName = ConfigurationManager.AppSettings["proxyNetworkCredentialUserName"];
                string password = ConfigurationManager.AppSettings["proxyNetworkCredentialPassword"];
                string domain = ConfigurationManager.AppSettings["proxyNetworkCredentialDomain"];
                return new NetworkCredential(userName, password, domain);
            }
            return System.Net.CredentialCache.DefaultCredentials;
        }
    }
  
}
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Http;

namespace WebProxyTest.API
{
[RoutePrefix("API/WebProxyTest")]
public class WebProxyController : ApiController
{
/// <summary>
/// Test proxy settings from web.config
/// </summary>
///
[Route("Test1")]
[HttpGet]
public IHttpActionResult ProxyFromConfig()
{
string url = @"http://jsonip.com";

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.ContentType = "application/json";

var response = request.GetResponse();
StreamReader responsestream = new StreamReader(response.GetResponseStream());

return Json( responsestream.ReadToEnd());
}

/// <summary>
/// Test proxy settings to handle from code
/// </summary>
[Route("Test2")]
[HttpGet]
public IHttpActionResult ProxyFromCode()
{

string url = @"http://jsonip.com";

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.ContentType = "application/json";

//check that "handleProxyInCode" is true in web.config file
bool enableProxyInCode = Convert.ToBoolean(ConfigurationManager.AppSettings["handleProxyInCode"]);

//run this code when "handleProxyInCode" is true
if (enableProxyInCode)
{
// Fetch proxy server settings from AppSettings section of Web.Config file
string proxyServerAddress = ConfigurationManager.AppSettings["proxyServerIPAddress"];
int proxyServerPort = Convert.ToInt16(ConfigurationManager.AppSettings["proxyServerPort"]);

// Set proxy credentials from web.config file
WebProxy proxy = new WebProxy(proxyServerAddress, proxyServerPort);
proxy.Credentials = GetNetworkCredentialForProxy();

request.Proxy = proxy;
}

var response = request.GetResponse();
StreamReader responsestream = new StreamReader(response.GetResponseStream());

return Json(responsestream.ReadToEnd());
}

/// <summary>
/// Return network credential for proxy from web.config file
/// </summary>
/// <returns> <typeparamref name="ICredentials"/></returns>
private ICredentials GetNetworkCredentialForProxy()
{
bool proxyUseCustomNetworkCredential = Convert.ToBoolean(ConfigurationManager.AppSettings["proxyUseCustomNetworkCredential"]);

if (proxyUseCustomNetworkCredential)
{
string userName = ConfigurationManager.AppSettings["proxyNetworkCredentialUserName"];
string password = ConfigurationManager.AppSettings["proxyNetworkCredentialPassword"];
string domain = ConfigurationManager.AppSettings["proxyNetworkCredentialDomain"];

return new NetworkCredential(userName, password, domain);
}
return System.Net.CredentialCache.DefaultCredentials;
}
}


}
Share:

Tags:

0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
UsamaAk
1 year ago

Succeed! It could be one of the most useful blogs we have ever come across on the subject. Excellent info! I’m also an expert in this topic so I can understand your effort very well. Thanks for the huge help. 1337x

Related posts