Ошибка 404 при выполнении вызова POST из Angular HttpClient в ASP.NET Core 2.2 Web API (с включенным CORS) - PullRequest
0 голосов
/ 01 марта 2019

Я написал простой ASP.NET Core 2.2 Web API.Метод POST всегда возвращает 404, но запросы GET выполняются успешно.

public class TestPayload
{
    public string test1 { get; set; }
    public string test2 { get; set; }
}

[Route("api/[controller]")]
[ApiController]
public class TestController: ControllerBase
{        
    // POST api/create
    [HttpPost]
    public async Task<ActionResult<string>> Create([FromBody] TestPayload value)
    {
        return Ok("");
    }
}

Я получаю сообщение об ошибке 404 в моем внешнем интерфейсе Angular HttpClient.

let headers = new HttpHeaders().set('Content-Type', 'application/json');

return this.http.post<any>(`${config.apiUrl}/test/create`, { test1, test2}, { headers }).pipe(map(x => {
                        ...               
                        return x;
                       }));

Я получаю ту же ошибку в Почтальоне.

POST /api/Test/Create HTTP/1.1
Host: localhost:5001
Content-Type: application/json
cache-control: no-cache
Postman-Token: 4d304e86-013c-4be8-af07-f2262079000d
{ test1: "val1", test2: "val2" }------WebKitFormBoundary7MA4YWxkTrZu0gW--

Я включил наиболее допустимые политики CORS (для тестирования) в моем файле Startup.cs, но это не решает проблему.

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll",
            builder =>
            {
                builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
            });
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);       
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }
    app.UseCors("AllowAll");
    app.UseHttpsRedirection();
    app.UseMvc();
}

Я вижуследующее сообщение в окне вывода в Visual Studio, которое заставляет меня поверить, что это ошибка CORS, но я не знаю, что я сделал неправильно.Мои контрольные точки внутри метода никогда не попадают, даже если символы загружены и они попадают в методы GET.

Microsoft.AspNetCore.Server.Kestrel:Information: Connection id "0HLKU1LFDTCPA", Request id "0HLKU1LFDTCPA:00000002": the application completed without reading the entire request body.

Это выполняется все на локальном хосте.Я установил пакет NuGet Microsoft.AspNetCore.Cors (2.2.0) в свой проект.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы не указали маршрут к действию.Вы можете изменить свое сообщение, перейдя в / api / Test, или установить атрибуты действия следующим образом:

[HttpPost("Create")]
public async Task<ActionResult<string>> Create([FromBody] TestPayload value)
{
    return Ok("");
}

или

[HttpPost]
[Route("Create")]
public async Task<ActionResult<string>> Create([FromBody] TestPayload value)
{
    return Ok("");
}

или обновить маршрут контроллера, включив в негодействие

[Route("api/[controller]/[action]")]
0 голосов
/ 01 марта 2019

Попробуйте добавить:

[EnableCors(origins: " * ", headers: " * ", methods: " * ")]

в ваш класс контроллера.(убрать с пробелами в кавычках)

Больше информации на Microsoft-Website

...