System.NullReferenceException with HttpService
При попытке вызова метода UsersController
, который обращается по http
к серверу вылезает NullPointer
В мидлваре я зарегистрировала RabbitMqConnection
. Требования из документации выполнены, но объект RabbitMqConnection
не инициализируется.
Далее приведен код, сначала контроллер обращающийся к RabbitMqConnection
, затем сам RabbitMqConnection
, и в конце Programm
проекта
Прикрепляю также скриншоты
// ===============UserController ===================
namespace tinderAPI.Controllers
{
[Microsoft.AspNetCore.Mvc.Route("[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
[Inject] RabbitMqConnection rbtMQ { get; set; }
[HttpPost]
[Microsoft.AspNetCore.Mvc.Route("AddUser")]
public IActionResult AddUser(User user)
{
// dbApi.AddUser(user);
var response = rbtMQ.AddUser(user);
return Ok(response);
}
}
}
//==============RabbitMqConnection===============
namespace tinder_API.HttpConnection
{
public sealed class RabbitMqConnection(
IHttpClientFactory httpClientFactory,
ILogger<HttpService> logger)
{
private readonly string baseUrl = "http://localhost:7274";
private readonly static UserEndpoints userEndpoints;
public async Task<bool> AddUser(User user)
{
using HttpClient client = httpClientFactory.CreateClient();
client.BaseAddress = new Uri(baseUrl);
using var content = new MultipartFormDataContent();
var json = JsonConvert.SerializeObject(user);
var userContent = new StringContent(json, Encoding.UTF8, "application/json");
userContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "info"
};
content.Add(userContent);
var response = await client.PostAsync(userEndpoints.ENDPOINT_AddUser, content);
return response.IsSuccessStatusCode;
}
//===========Middleware==============
namespace tinder_API
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddHttpClient();
builder.Services.AddTransient<RabbitMqConnection>();
builder.Services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
var app = builder.Build();
app.UseCors("CorsPolicy");
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
}
}
}
Ответы (1 шт):
Автор решения: Екатерина Воронина
→ Ссылка
нужно этот код
[Inject] RabbitMqConnection rbtMQ { get; set; }
заменить на
private readonly RabbitMqConnection _rbtMQ;
public UsersController(RabbitMqConnection rbtMQ)
{
_rbtMQ = rbtMQ;
}