Я использую встроенный шаблон проекта для React и ASP.NET Core из Visual Studio 2022, который создает клиентское приложение React и серверное приложение ASP.NET Core.
Я хотел протестировать добавление нового контроллера помимо контроллера прогноза погоды по умолчанию и воздействие на эту конечную точку с помощью перехватчика useEffect в файле app.jsx. Когда я добавляю асинхронную функцию для целевой точки «Тест», конечная точка в моем новом контроллере никогда не попадает в цель. Я пытался структурировать контроллер так же, как контроллер прогноза погоды, но новый контроллер никогда не запускается от клиента. Я могу достичь конечной точки, используя чванство. Я чувствую, что есть простое решение этой проблемы — какая-то регистрация контроллера, которой мне не хватает, но я не могу ее найти.
Это мой app.jsx код> файл. Я добавил ловушку useState для установки и получения константы testMessage, а также асинхронный метод populateTestData для получения данных из контроллера Test. Get endpoint для установки testMessage.. р>
import { useEffect, useState } from 'react';
import './App.css';
function App() {
const [forecasts, setForecasts] = useState();
const [testMessage, setTestMessage] = useState();
useEffect(() => {
populateWeatherData();
populateTestData();
}, []);
const contents = forecasts === undefined
?
Loading... Please refresh once the ASP.NET backend has started. See https://aka.ms/jspsintegrationreact for more details.
:
Date
Temp. (C)
Temp. (F)
Summary
{forecasts.map(forecast =>
{forecast.date}
{forecast.temperatureC}
{forecast.temperatureF}
{forecast.summary}
)}
;
const message = testMessage === undefined ?
Loading from Server...
: {testMessage};
return (
Weather forecast
This component demonstrates fetching data from the server.
{contents}
{message}
);
async function populateWeatherData() {
const response = await fetch('weatherforecast');
const data = await response.json();
setForecasts(data);
}
async function populateTestData() {
const response = await fetch('test');
const data = await response.json();
setTestMessage(data);
}
}
export default App;
Это мой TestController. Я попытался структурировать это аналогично стандартному WeatherForecastController. Функция populateTestData должна достичь конечной точки Get() в этом контроллере, но моя точка останова при вызове этого метода никогда не будет достигнута
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ReactDotNetPractice.Server.Controllers
{
[Route("[controller]")]
[ApiController]
public class TestController : ControllerBase
{
private readonly ILogger _logger;
public TestController(ILogger logger)
{
_logger = logger;
}
[HttpGet(Name = "GetTest")]
public string Get()
{
return "This is the test message you should receive from the Test endpoint.";
}
}
}
WeatherForecastController — в основном это для справки. Конечная точка Get в этом контроллере обрабатывается методом populateWeatherData в app.jsx каждый раз при загрузке страницы, как и должно быть:
using Microsoft.AspNetCore.Mvc;
namespace ReactDotNetPractice.Server.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
Файл Program.cs, если это полезно, хотя я не вижу нигде, где бы конкретно настраивался WeatherForecastController
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseDefaultFiles();
app.UseStaticFiles();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.MapFallbackToFile("/index.html");
app.Run();
Подробнее здесь: https://stackoverflow.com/questions/791 ... t-from-cli
Шаблон проекта React + ASP.NET Core не может подключиться к новой конечной точке контроллера от клиента ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение