-1
나는 asp.net 코어에서 프록시 서비스를하고, 요청이 다른 서비스로 라우팅 될 확장 기능을 제공한다.어떻게 asp.net 코어 보편적 인 프록시
내 확장자 :
public static IApplicationBuilder UseProxy(this IApplicationBuilder builder, List<ProxySetting> options)
{
builder.Use(async (context, next) =>
{
var resultPathHandler = options.ProxySettingHandler(context.Request.Path, context.Request.Method);
if (!resultPathHandler.Equal)
//continues through the rest of the pipeline
await next();
else
{
using (var httpClient = new HttpClient())
{
var pathSetting = resultPathHandler.Setting;
var requestMessage = new HttpRequestMessage();
//добавляем хедеры
foreach (var header in context.Request.Headers)
{
if (!httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value.ToArray()))
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key,
header.Value.ToArray());
}
}
if (context.Request.HasFormContentType && context.Request.Form.Count > 0)
{
var temp = new Dictionary<string, object>();
foreach (var form in context.Request.Form)
{
requestMessage.Properties.Add(form.Key, form.Value);
temp.Add(form.Key, form.Value);
}
var jsonString = JsonConvert.SerializeObject(temp).Replace(":[", ":").Replace("],",",");
var mediatype = string.Empty;
if (context.Request.ContentType.Contains(';'))
mediatype = context.Request.ContentType.Split(';')[0];
else
mediatype = context.Request.ContentType;
requestMessage.Content = new StringContent(jsonString, Encoding.UTF8, mediatype);
}
requestMessage.Headers.Host = pathSetting.Host;
var host = pathSetting.GetUri(context.Request.Path);
var uriString = $"{host}{context.Request.QueryString}";
requestMessage.RequestUri = new Uri(uriString);
requestMessage.Method = new HttpMethod(pathSetting.Method);
var response = await httpClient.SendAsync(requestMessage);
var result = await response.Content.ReadAsStringAsync();
var resultObj = JsonConvert.DeserializeObject<object>(result);
context.Response.StatusCode = (int)response.StatusCode;
await context.Response.WriteAsync(resultObj.ToString());
}
}
});
return builder;
}
이 코드 :
if (context.Request.HasFormContentType && context.Request.Form.Count > 0)
{
var temp = new Dictionary<string, object>();
foreach (var form in context.Request.Form)
{
requestMessage.Properties.Add(form.Key, form.Value);
temp.Add(form.Key, form.Value);
}
var jsonString = JsonConvert.SerializeObject(temp).Replace(":[", ":").Replace("],",",");
var mediatype = string.Empty;
if (context.Request.ContentType.Contains(';'))
mediatype = context.Request.ContentType.Split(';')[0];
else
mediatype = context.Request.ContentType;
requestMessage.Content = new StringContent(jsonString, Encoding.UTF8, mediatype);
}
응용 프로그램/x-www-form-urlencoded로 또는 응용 프로그램/폼 데이터, 컨텐츠가에 추가 매개 변수를 넣어, 다른 서비스에 보내지 만, 나는 다른 서비스에서이 매개 변수를 얻지 못한다. 도와주세요.이 기능을 해제해야합니다. Thx와 나의 나쁜 영어에 대한 미안.