javascript Fetch API在asp.net核心web api应用程序中找不到控制器

ijnw1ujt  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(97)

我尝试使用fetch API从asp.net core web api应用程序加载数据到react组件。但我很困惑,当我使用FetchData组件中的示例await fetch('weatherforecast')调用WeatherForecastController时。我在示例代码中做了一个调试,WeatherForecastController中的功能很好地达到了,但是如果我在我的项目中使用这个想法,它就不起作用了,我在调试中的功能没有达到。谁能解释一下fetch API在我的例子中的用法?
控制器类

[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
    [HttpGet]
    public IEnumerable<T> Get()
    {
        //do something
    }
}

我的react组件

const response = await fetch('Hello');

在program.cs中(我使用的是.net 6)

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();
builder.Services.AddDbContext<T>(options =>
    options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddControllers();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new() { Title = "MY API", Version = "v1" });
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MY APP v1"));
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.UseRouting();
app.MapControllers();
app.Run();

我在setupProxy中发现了一些有趣的东西

const { createProxyMiddleware } = require('http-proxy-middleware');

const context = [
    '/weatherforecast',
    '/controllerName1',
    '/controllerName2',
];

module.exports = function (app) {
    const appProxy = createProxyMiddleware(context, {
        target: 'https://localhost:5001',
        secure: false
    });

    app.use(appProxy);
};

默认的weatherforecast控制器工作,通过调试,路由正确。但是如果我在另一个控制器中尝试它,它不起作用。有人能解释一下吗?

cetgtptt

cetgtptt1#

我可以通过添加到setupProxy来添加控制器,并向其添加了一个控制器。

const context = [
    '/weatherforecast',
    '/hello'
];
lstz6jyr

lstz6jyr2#

你能查一下Startup.cs吗?可能是你在那里设置了路由前缀。比如api因此,在这种情况下,您的url将是/api/hello或配置swashbuckle,这将告诉确切的路由,并给予您选择尝试您的API

相关问题