使用axios在asp.net核心React应用程序中调用控制器api时代码405失败

时间:2019-04-02 19:21:14

标签: reactjs asp.net-web-api asp.net-core controller axios

我正在开发一个简单的react + asp.net核心应用程序,我想在其中简单地将记录添加到数据库(使用EntityFramework核心创建)。有一个非常简单的表单,只有一个文本框和一个按钮。单击该按钮时,出现以下错误:

  

错误:请求失败,状态码为405

我在运行时进行了调试,并且未引发控制器类中的Create方法。也就是说,axios无法识别所提供的url。下面是客户端代码:

class Form extends Component {

    state = { rubricName: '' }

    handleFormSubmit = (event) => {
        event.preventDefault();           

        axios({
            method: 'post',
            url: 'api/Rubric/Create',
            data: {
                title: this.state.rubricName,
            },
            headers: {
                'Content-Type': 'text/plain;charset=utf-8',
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE,PATCH,OPTIONS',
            },
        }).then(function (response) {
            console.log(response);
        }).catch(function (error) {
            console.log(error);
        });

这是控制器api类:

[Route("api/[controller]")]
public class RubricController : Controller
{
    RubricDataAccessLayer objRubric = new RubricDataAccessLayer();


    [HttpPost]
    [Route("api/Rubric/Create")]
    public int Create(string title)
    {
        return objRubric.AddRubric(new Rubric { Title = title });
    }
}

关于我为什么会出现此错误的任何想法?

1 个答案:

答案 0 :(得分:1)

您在请求中指定了错误的URL。如果控制器上只有一个Route属性,则网址应为

api/Rubric

如果您同时保留两个网址,则结果网址为Route属性的组合值

api/Rubric/api/Rubric/Create

如果您要覆盖操作网址而不将其与控制器一并用,只需添加前导/(或~/

[HttpPost]
[Route("/api/Rubric/Create")]
public int Create(string title)

在这种情况下,请求网址应为

api/Rubric/Create