[英]Post method returns 404 in Asp.net core 2.2 Web API Controller
[英]404 error when making a POST call from Angular HttpClient to ASP.NET Core 2.2 Web API (with CORS enabled)
我已经编写了一个简单的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("");
}
}
我在Angular HttpClient前端中返回404错误。
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--
我已经在Startup.cs文件中启用了最宽松的CORS策略(以进行测试),但不能解决问题。
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.
这全部在localhost上运行。 我已经在项目中安装了Microsoft.AspNetCore.Cors(2.2.0)NuGet软件包。
您尚未指定操作的路线。 您可以将帖子更改为转到/ 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]")]
尝试添加:
[EnableCors(origins: " * ", headers: " * ", methods: " * ")]
到您的Controller类。 (删除引号中的空格)
Microsoft网站上的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.