Skip to content

Commit ee9b085

Browse files
committed
Add Mvc only monolith service class
1 parent d70c4b9 commit ee9b085

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*
2+
3+
using System;
4+
using System.Threading.Tasks;
5+
using System.Net;
6+
using System.Net.Http;
7+
using System.IO;
8+
using System.Web;
9+
using System.Web.Mvc;
10+
using System.Web.Configuration;
11+
using System.Web.Routing;
12+
13+
namespace Modernize.Web.Mvc.Controllers
14+
{
15+
public static class MonolithService
16+
{
17+
private static string ServiceHost = WebConfigurationManager.AppSettings["ServiceHost"];
18+
private static string ServicePort = WebConfigurationManager.AppSettings["ServicePort"];
19+
private static string ServiceUrl = $"https://{ServiceHost}";
20+
private static HttpClientHandler handler = new HttpClientHandler()
21+
{
22+
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
23+
};
24+
private static HttpClient client = new HttpClient(handler);
25+
26+
public static async Task<string> CreateRequestAsync(HttpRequestBase httpRequest, System.Web.Routing.RouteData routeData)
27+
{
28+
string actionName = routeData.Values["action"].ToString();
29+
string controllerName = routeData.Values["controller"].ToString();
30+
var httpMessage = GetRequestMessage(httpRequest, controllerName, actionName);
31+
return await InvokeRequestAsync(httpMessage);
32+
}
33+
34+
public static string CreateRequest(HttpRequestBase httpRequest, System.Web.Routing.RouteData routeData)
35+
{
36+
string actionName = routeData.Values["action"].ToString();
37+
string controllerName = routeData.Values["controller"].ToString();
38+
var httpMessage = GetRequestMessage(httpRequest, controllerName, actionName);
39+
return InvokeRequest(httpMessage);
40+
}
41+
42+
private static async Task<string> InvokeRequestAsync(HttpRequestMessage requestMessage)
43+
{
44+
var result = await client.SendAsync(requestMessage).ConfigureAwait(false);
45+
var stringResult = await result.Content.ReadAsStringAsync().ConfigureAwait(false);
46+
return stringResult;
47+
}
48+
49+
private static string InvokeRequest(HttpRequestMessage requestMessage)
50+
{
51+
var result = client.SendAsync(requestMessage).Result;
52+
var stringResult = result.Content.ReadAsStringAsync().Result;
53+
return stringResult;
54+
}
55+
56+
private static HttpRequestMessage GetRequestMessage(HttpRequestMessage httpRequestMessage, string controllerName, string actionName)
57+
{
58+
var currentUri = httpRequestMessage.RequestUri;
59+
var uriBuilder = new UriBuilder($"{ServiceUrl}/{controllerName}/{actionName}")
60+
{
61+
Host = ServiceHost,
62+
Port = int.Parse(ServicePort),
63+
Fragment = currentUri.Fragment,
64+
Scheme = currentUri.Scheme,
65+
Path = currentUri.PathAndQuery
66+
};
67+
68+
var newRequest = httpRequestMessage;
69+
newRequest.RequestUri = uriBuilder.Uri;
70+
return newRequest;
71+
}
72+
private static HttpRequestMessage GetRequestMessage(HttpRequestBase httpRequest, string controllerName, string actionName)
73+
{
74+
var httpMethod = new HttpMethod(httpRequest.HttpMethod);
75+
var currentUri = httpRequest.Url;
76+
var uriBuilder = new UriBuilder($"{ServiceUrl}/{controllerName}/{actionName}")
77+
{
78+
Host = ServiceHost,
79+
Port = int.Parse(ServicePort),
80+
Fragment = currentUri.Fragment,
81+
Scheme = currentUri.Scheme,
82+
Path = currentUri.PathAndQuery
83+
};
84+
var requestMessage = new HttpRequestMessage(httpMethod, uriBuilder.Uri);
85+
var currentHeaders = httpRequest.Headers.Keys;
86+
87+
if (httpMethod == HttpMethod.Post || httpMethod == HttpMethod.Put)
88+
{
89+
var streamReader = new StreamReader(httpRequest.InputStream).ReadToEnd();
90+
requestMessage.Content = new StringContent(streamReader);
91+
requestMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(httpRequest.ContentType);
92+
requestMessage.Content.Headers.ContentEncoding.Add(httpRequest.ContentEncoding.HeaderName);
93+
requestMessage.Content.Headers.ContentLength = httpRequest.ContentLength;
94+
}
95+
for (int i = 0; i < currentHeaders.Count; i++)
96+
{
97+
try
98+
{
99+
if (currentHeaders[i] == "Host")
100+
{
101+
requestMessage.Headers.Add(currentHeaders[i], ServiceHost);
102+
}
103+
else if (currentHeaders[i].StartsWith("Content-"))
104+
{
105+
requestMessage.Content.Headers.TryAddWithoutValidation(currentHeaders[i], httpRequest.Headers[currentHeaders[i]]);
106+
}
107+
else
108+
{
109+
requestMessage.Headers.TryAddWithoutValidation(currentHeaders[i], httpRequest.Headers[currentHeaders[i]]);
110+
}
111+
}
112+
catch (Exception ex)
113+
{
114+
}
115+
}
116+
return requestMessage;
117+
}
118+
}
119+
}
120+
121+
122+
*/

0 commit comments

Comments
 (0)