[英]Cannot get response from C# API controller with Angular
我开始使用 Angular 并创建了 C# (.NET 6) 和 Angular (14.1.2) 应用程序。 访问我的 controller 时遇到问题:我无法从我的 controller 的 HTTP 方法中得到响应。
有趣的是,使用新项目创建的默认“WeatherForecastController”工作正常。
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
// GET: api/<ProductController>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
[HttpGet]
[Route("getnumb")]
public int GetNumber()
{
return 43;
}
}
using Hardware_Store_App.Models;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddDbContext<StoreContext>(options => options.UseNpgsql(builder.Configuration.GetConnectionString("defaultConnection")));
builder.Services.AddCors(p => p.AddPolicy("corsapp", builder =>
{
builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader();
}));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors("corsapp");
app.MapControllers();
app.MapFallbackToFile("index.html"); ;
app.Run();
当我尝试请求控制器的方法时,浏览器控制台中出现的错误:
core.mjs:6485 ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'api/product'
Error: Cannot match any routes. URL Segment: 'api/product'
at ApplyRedirects.noMatchError (router.mjs:2939:16)
at router.mjs:2921:28
at catchError.js:10:38
at OperatorSubscriber._error (OperatorSubscriber.js:23:1)
at OperatorSubscriber.error (Subscriber.js:40:1)
at OperatorSubscriber._error (Subscriber.js:64:1)
at OperatorSubscriber.error (Subscriber.js:40:1)
at OperatorSubscriber._error (Subscriber.js:64:1)
at OperatorSubscriber.error (Subscriber.js:40:1)
at OperatorSubscriber._error (Subscriber.js:64:1)
at resolvePromise (zone.js:1211:1)
at resolvePromise (zone.js:1165:1)
at zone.js:1278:1
at _ZoneDelegate.invokeTask (zone.js:406:1)
at Object.onInvokeTask (core.mjs:25579:1)
at _ZoneDelegate.invokeTask (zone.js:405:1)
at Zone.runTask (zone.js:178:1)
at drainMicroTaskQueue (zone.js:585:1)
这是 Postman 返回的内容
所以我想,也许我必须声明 controller 什么的
只使用app.MapControllers();
像这样:
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
让你的方法像这样
[HttpGet("getnumb")]
public int GetNumber()
{
return 43;
}
而不是:
app.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
利用:
app.MapControllers();
这样 .NET 将在您的应用程序和 map 中查找所有控制器:)
编辑:您还可以添加swagger
以更轻松地调试这些情况:
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// ... other services
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
问题是端口错误,我一直在尝试请求。 我认为服务器在端口上运行,默认情况下在浏览器中打开。 但我不知道为什么它与默认的 controller 配合得很好......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.