Napisałem proste ASP.NET Core 2.2 Web API. Metoda POST zawsze zwraca 404, ale uzyskaj żądania odnieść sukces.

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("");
    }
}

Wracam błąd 404 w moim kątowym httpclient front-end.

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

Dostaję ten sam błąd w Postana.

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--

Włączyłem najbardziej permisją zasadami CORS (do testowania) w moim pliku startup.cs, ale nie rozwiązuje problemu.

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();
}

Widzę następujący komunikat w oknie wyjściowym w Visual Studio, co prowadzi mnie do wierzenia, że jest to błąd CORS, ale nie wiem, co zrobiłem źle. Moje punkty przerwliwe wewnątrz metody nigdy nie trafiają, nawet jeśli symbole są ładowane i są trafione w metodach GET.

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

To działa wszystko na localhost. Zainstalowałem pakiet Nuget Microsoft.aspnetcore.Cors (2.2.0) w moim projekcie.

0
JordanBean 1 marzec 2019, 09:50

2 odpowiedzi

Najlepsza odpowiedź

Nie podałeś drogi do działania. Możesz zmienić swój post, aby przejść do / API / testować lub ustawić atrybuty w następujący sposób:

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

Lub

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

Lub zaktualizuj trasę kontrolera, aby uwzględnić akcję

[Route("api/[controller]/[action]")]
4
benq143 1 marzec 2019, 09:22

Spróbuj dodać:

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

Do swojej klasy kontrolera. (Usuń ze spacjami w cytatach)

Więcej informacji na temat Microsoft-Strona

0
ArunPratap 1 marzec 2019, 07:12