从 post 对 .Net Core 3.1 API 的请求获取“405 方法不允许”
Getting "405 Method Not Allowed" from post request to .Net Core 3.1 API
我正在 .Net Core 中开发一个新的 Web api,之前使用过 .Net Framework。
我有一个 post 端点,它应该从请求正文中获取一个 json 对象并用它做一些事情,但我从来没有到达我的端点,只得到响应“405方法不允许”,当我在 postman.
中测试它时
控制器:
[Route("api/[controller]")]
[ApiController]
public class PageHitController : ControllerBase
{
private IMongoCollection<PageHit> pageHitsCollection;
public PageHitController(IMongoClient _client)
{
var mongoDB = _client.GetDatabase("POC_MongoDB");
pageHitsCollection = mongoDB.GetCollection<PageHit>("PageHits");
}
[HttpPost]
[Route("api/pagehit")]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
{
// Do Stuff
return Ok();
}
}
预期对象:
[BsonIgnoreExtraElements]
public class PageHit
{
[BsonId]
public Guid ID { get; set; }
[BsonElement("clientid")]
public Guid ClientID { get; set; }
[BsonElement("domain")]
public string Domain { get; set; }
[BsonElement("sessionid")]
public string SessionID { get; set; }
[BsonElement("url")]
public string Url { get; set; }
[BsonElement("pagesize")]
public int PageSize { get; set; }
}
Startup.cs:
services.AddCors(o => o.AddPolicy("CorsPolicy", builder => {
builder
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowAnyOrigin();
}));
请你帮帮我。我所有的 GET 端点都工作正常,但这个 POST 不是。
您必须修复操作路由属性。您可以删除 [Route("api/pagehit")] 属性,使其成为默认操作
[HttpPost]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
或修复路由属性
[HttpPost]
[Route("~/api/addpagehit")]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
在这种情况下,您也必须在 postman 中将 pagehit 更改为 addpagehit
我正在 .Net Core 中开发一个新的 Web api,之前使用过 .Net Framework。
我有一个 post 端点,它应该从请求正文中获取一个 json 对象并用它做一些事情,但我从来没有到达我的端点,只得到响应“405方法不允许”,当我在 postman.
中测试它时控制器:
[Route("api/[controller]")]
[ApiController]
public class PageHitController : ControllerBase
{
private IMongoCollection<PageHit> pageHitsCollection;
public PageHitController(IMongoClient _client)
{
var mongoDB = _client.GetDatabase("POC_MongoDB");
pageHitsCollection = mongoDB.GetCollection<PageHit>("PageHits");
}
[HttpPost]
[Route("api/pagehit")]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
{
// Do Stuff
return Ok();
}
}
预期对象:
[BsonIgnoreExtraElements]
public class PageHit
{
[BsonId]
public Guid ID { get; set; }
[BsonElement("clientid")]
public Guid ClientID { get; set; }
[BsonElement("domain")]
public string Domain { get; set; }
[BsonElement("sessionid")]
public string SessionID { get; set; }
[BsonElement("url")]
public string Url { get; set; }
[BsonElement("pagesize")]
public int PageSize { get; set; }
}
Startup.cs:
services.AddCors(o => o.AddPolicy("CorsPolicy", builder => {
builder
.WithMethods("GET", "POST")
.AllowAnyHeader()
.AllowAnyOrigin();
}));
请你帮帮我。我所有的 GET 端点都工作正常,但这个 POST 不是。
您必须修复操作路由属性。您可以删除 [Route("api/pagehit")] 属性,使其成为默认操作
[HttpPost]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
或修复路由属性
[HttpPost]
[Route("~/api/addpagehit")]
public async Task<ActionResult> AddPageHit([FromBody] PageHit pageHit)
在这种情况下,您也必须在 postman 中将 pagehit 更改为 addpagehit