Asp.net core WebAPI(aspnetcore 2.2)的生产Web服务器不允许HTTPPost
我在StartUp.ConfigureServices中有以下代码Asp.net core WebAPI(aspnetcore 2.2)的生产Web服务器不允许HTTPPost,asp.net-core,asp.net-web-api,http-post,http-status-code-404,Asp.net Core,Asp.net Web Api,Http Post,Http Status Code 404,我在StartUp.ConfigureServices中有以下代码 services.AddCors(c=>c.AddPolicy(Konstants.CORS, d=> d.AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin() .AllowCre
services.AddCors(c=>c.AddPolicy(Konstants.CORS, d=>
d.AllowAnyHeader()
.AllowAnyMethod()
.AllowAnyOrigin()
.AllowCredentials()
)
);
在Configure方法中,我使用以下内容作为第一行:
app.UseCors(Konstants.CORS);
在web api的每个控制器上,我都使用以下命令
[Route("api/[controller]")]
[EnableCors(Konstants.CORS)]
[ApiController, Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Consumes("application/json"), Produces("application/json")]
public class EmployeesController : ApiBaseController
{
在本地机器上,一切正常。但在远程机器(即生产机器)上,HTTPGet工作正常,但对于所有HTTPPOST,它返回404
这是我的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\myapp.Web.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
可能是什么问题?我可以通过plesk访问Web服务器。
我错过了一些细节。该网站在同一应用程序中有常规控制器和API控制器。对于api控制器,我们使用JWTToken;对于其他控制器,我们使用cookie。这个网站运行得很好。Api控制器让所有Get请求都能正常工作,它们甚至能正确地从数据库中获取数据(所以至少这不是DB问题),但所有Api POST返回404。找不到URL
正如@Anton所问的,这里是一个post请求
[HttpPost("Start")]
public async Task<IActionResult> StartJob([FromBody] JobActivityModel model)
{
var ret = Empty;
try
{
await Execute(new StartJob
{
JobId = model.JobId,
PersonId = UserId,
At = model.CreatedAt
});
Log.Info($"{SoligoUser} has started the job");
ret = Ok(new TimeClue
{
Message = "job has been started",
IsSuccess = true,
Time = model.CreatedAt
});
}
catch (Exception ex)
{
Log.Error(ex);
ret = Error(ex);
}
return ret;
}
[HttpPost(“开始”)]
公共异步任务StartJob([FromBody]JobActivityModel模型)
{
var-ret=空;
尝试
{
等待执行(新启动作业)
{
JobId=model.JobId,
PersonId=UserId,
At=model.CreatedAt
});
Log.Info($“{SoligoUser}已启动作业”);
ret=正常(新时间线索
{
Message=“作业已启动”,
IsSuccess=true,
时间=model.CreatedAt
});
}
捕获(例外情况除外)
{
日志错误(ex);
ret=错误(ex);
}
返回ret;
}
您可以尝试以下内容
在web搜索上浪费了很多时间之后,这就是解决方案: 添加这一行解决了所有问题。Post现在工作正常,有时遇到的“介质不受支持”错误也已修复
我希望有一天编译器会告诉你“嘿,你需要把这个放进去”你很有可能达到500,如果你没有错误处理页面,它会给你一个404。因为它发生在
POST
上,所以我假设您正在尝试向数据库写入一些内容。检查数据库是否正常工作。最重要的是启用开发人员异常页面。数据库应该可以正常工作,因为所有命中数据库的get请求都会正确返回数据。所以我假设它和数据库并没有什么关系。我已经添加了大量日志记录,但API控制器甚至还没有到达。这可能值得展示一个您尝试访问的操作的示例。是的,在我的问题中添加了一个post请求,以便您可以查看代码。它甚至没有达到这一点。我的提供商不允许访问RDP,他提到出于安全原因,这是不可能的。那么试试招摇过市吧。