Я пытаюсь отправить запрос POST
на сервер. Запрос попадает в метод Middleware
Invoke
.
Однако Content
всегда равен нулю, независимо от того,тип объекта.
Отправитель
public async Task<string> RunTestAsync(string request)
{
try
{
var content = new StringContent(JsonConvert.SerializeObject(request),Encoding.UTF8,"application/json");
var response=await this.client.PostAsync("http://localhost:8500/mat",
content);
string str=await response.Content.ReadAsStringAsync();
stringdata = JsonConvert.DeserializeObject<string>(str);
return data;
}
catch (Exception ex)
{
Console.WriteLine("Threw in client" + ex.Message);
throw;
}
}
Сервер
На сервере не определено service
, простопростой middleware
, который отвечает на route
.(Запрос получает метод Invoke
!)
Запуск
public class Startup
{
public void ConfigureServices(IServiceCollection services) {
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
app.UseDeveloperExceptionPage();
app.UseBlazor<Client.Startup>();
app.Map("/mid", a => {
a.UseMiddleware<Mware>();
});
});
}
}
Промежуточное ПО
public class Mware
{
public RequestDelegate next{get;set;}
public Mware(RequestDelegate del)
{
this.next=del;
}
public async Task Invoke(HttpContext context)
{
using (var sr = new StreamReader(context.Request.Body))
{
string content = await sr.ReadToEndAsync();//null ,tried other types too , still null ,and the ContentLength is null too
var request=JsonConvert.DeserializeObject<string>(content);
if (request == null)
{
return;
}
}
}
}
Я проверил свою сериализацию, и объект сериализуется очень хорошо.
Несмотря на это, я всегда получаю null
на другой стороне.
PS
Я также пытался использовать не middleware
просто простой делегат, как показано ниже:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
app.UseDeveloperExceptionPage();
app.UseBlazor<Client.Startup>();
app.Map("/mid",x=>{
x.Use(async(context,del)=>{
using (var sr = new StreamReader(context.Request.Body))
{
string content = await sr.ReadToEndAsync();//null ,tried other types too , still null ,and the ContentLength is null too
var request=JsonConvert.DeserializeObject<string>(content);
if (request == null)
{
return;
}
}
});
}
Даже без выделенного middleware
проблема сохраняется.
Проблема не вmiddleware
, это запрос, который правильно сериализован в клиенте, отправлен на сервер, и каким-то образом его body
отображается как null
.
Я бы понял, если бы не удалось deserialize
объект, но HttpContext.Request.Body
в виде строки получен null
и его length
равно null
!!