加载资源失败:服务器响应状态为 405
Failed to load resource: the server responded with a status of 405
当尝试使用 $.ajax 从客户端调用 ASP.NET 方法时,出现以下错误“加载资源失败:服务器响应状态为 405 ()”,知道客户端和 API 都在同一域“localhost:4500”上 运行,我按照我在这个 Microsoft 文档“https: //docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-javascript?view=aspnetcore-5.0 " 并添加了 wwwroot 文件夹以避免 CORS 问题,但仍然无法通过 调用 API 方法javascript.
中的 $.ajax 方法
我通过 swagger 测试了后端代码,它工作得很好。
这是我的后端控制器代码:
[ApiController]
[Route("api/[Controller]")]
public class RunAnalysisController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok();
}
[HttpPost("LoadFramesData")]
public IActionResult LoadFrameData([FromBody]RootObject ModelData)
{
try
{
ManageModel.CreateModel(ModelData);
return Ok(ModelData); //returning same object for testing purpose
}
catch
{
return BadRequest("Error");
}
}
}
这是我在客户端的 ajax 函数:
$.ajax({
type: "POST",
url: "api/RunAnalysis/LoadFramesData", ///// URL must be specified
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(new RootData()), //this class returns a json object
cache: false,
success: function (result) {
console.log(result);
},
error: function (ex) {
WriteToConsole(ex.responseText);
}
});
如评论中所述,问题与请求 url 相关,将 url 更改为如下:url: "/api/RunAnalysis/LoadFramesData
.
更多详细信息,您可以参考以下示例:
型号:
public class RootObject
{
public int ID { get; set; }
public string Name { get; set; }
}
MVC 视图页面:
<input type="button" id="btnsubmit" value="Click Me" />
@section Scripts{
<script>
$(function () {
// LoadChart();
class RootData {
constructor(id, name) {
this.ID = id;
this.Name = name;
}
}
$("#btnsubmit").click(function () {
//var data = {};
//data.ID = "1001";
//data.Name = "Tom";
$.ajax({
type: "POST",
url: "/api/todo/LoadFramesData", ///// URL must be specified
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(new RootData(1001, "Tom")), //this class returns a json object
cache: false,
success: function (result) {
alert(result.name);
},
error: function (ex) {
alert(ex.responseText);
}
});
});
});
</script>
}
API上传方式:
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
[HttpPost("LoadFramesData")]
public IActionResult LoadFrameData([FromBody] RootObject ModelData)
{
try
{
return Ok(ModelData);
}
catch
{
return BadRequest("Error");
}
}
结果如下:
当尝试使用 $.ajax 从客户端调用 ASP.NET 方法时,出现以下错误“加载资源失败:服务器响应状态为 405 ()”,知道客户端和 API 都在同一域“localhost:4500”上 运行,我按照我在这个 Microsoft 文档“https: //docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-javascript?view=aspnetcore-5.0 " 并添加了 wwwroot 文件夹以避免 CORS 问题,但仍然无法通过 调用 API 方法javascript.
中的 $.ajax 方法我通过 swagger 测试了后端代码,它工作得很好。
这是我的后端控制器代码:
[ApiController]
[Route("api/[Controller]")]
public class RunAnalysisController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok();
}
[HttpPost("LoadFramesData")]
public IActionResult LoadFrameData([FromBody]RootObject ModelData)
{
try
{
ManageModel.CreateModel(ModelData);
return Ok(ModelData); //returning same object for testing purpose
}
catch
{
return BadRequest("Error");
}
}
}
这是我在客户端的 ajax 函数:
$.ajax({
type: "POST",
url: "api/RunAnalysis/LoadFramesData", ///// URL must be specified
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(new RootData()), //this class returns a json object
cache: false,
success: function (result) {
console.log(result);
},
error: function (ex) {
WriteToConsole(ex.responseText);
}
});
如评论中所述,问题与请求 url 相关,将 url 更改为如下:url: "/api/RunAnalysis/LoadFramesData
.
更多详细信息,您可以参考以下示例:
型号:
public class RootObject
{
public int ID { get; set; }
public string Name { get; set; }
}
MVC 视图页面:
<input type="button" id="btnsubmit" value="Click Me" />
@section Scripts{
<script>
$(function () {
// LoadChart();
class RootData {
constructor(id, name) {
this.ID = id;
this.Name = name;
}
}
$("#btnsubmit").click(function () {
//var data = {};
//data.ID = "1001";
//data.Name = "Tom";
$.ajax({
type: "POST",
url: "/api/todo/LoadFramesData", ///// URL must be specified
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(new RootData(1001, "Tom")), //this class returns a json object
cache: false,
success: function (result) {
alert(result.name);
},
error: function (ex) {
alert(ex.responseText);
}
});
});
});
</script>
}
API上传方式:
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
[HttpPost("LoadFramesData")]
public IActionResult LoadFrameData([FromBody] RootObject ModelData)
{
try
{
return Ok(ModelData);
}
catch
{
return BadRequest("Error");
}
}
结果如下: