繁体   English   中英

无法从 C# API controller 与 Angular 得到响应

[英]Cannot get response from C# API controller with Angular

我开始使用 Angular 并创建了 C# (.NET 6) 和 Angular (14.1.2) 应用程序。 访问我的 controller 时遇到问题:我无法从我的 controller 的 HTTP 方法中得到响应。
有趣的是,使用新项目创建的默认“WeatherForecastController”工作正常。

Controller:

    [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;
        }
    }

程序.cs

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM