加载资源失败:服务器响应状态为 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");
        }
    }

结果如下: