C# 不允许使用Asp.Net Core 3.1 405方法

C# 不允许使用Asp.Net Core 3.1 405方法,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,嗨,伙计们,我需要帮助。。我总是得到不允许的405方法 我使用的是Asp.Net核心Web应用程序3.1,我对HttpGet没有问题,但是当我使用HttpPost时,它总是返回405状态代码 这是我的控制器 [Route("api/[controller]")] [ApiController] public class ExamController : ControllerBase { [HttpPost("PostValue")] public ActionResult<

嗨,伙计们,我需要帮助。。我总是得到不允许的405方法

我使用的是Asp.Net核心Web应用程序3.1,我对HttpGet没有问题,但是当我使用HttpPost时,它总是返回405状态代码

这是我的控制器

[Route("api/[controller]")]
[ApiController]
public class ExamController : ControllerBase
{
    [HttpPost("PostValue")]
    public ActionResult<HttpResponseMessage> PostInfo([FromBody] PersonalInfo info)
    {
        string json = JsonConvert.SerializeObject(info);
        HttpClient client = new HttpClient();
        var response = client.PostAsync("https://sampleapi/receive", new StringContent(json, Encoding.UTF8, "application/json"));

        if (response.IsFaulted)
            return BadRequest(response);

        return Ok(response);
    }
}

查看提供的图像,您可以使用chrome发出url请求,这是一个HTTP GET命令。因此,您的应用程序获得了HTTP GET命令,但您的方法希望接受HTTP POST方法。这就是为什么它说“方法不允许”


如果您想尝试http命令,您需要一个web测试工具,例如

查看提供的图像,您可以使用chrome发出url请求,这是一个HTTP GET命令。因此,您的应用程序获得了HTTP GET命令,但您的方法希望接受HTTP POST方法。这就是为什么它说“方法不允许”


如果您想尝试http命令,您需要一个web测试工具,例如

除了postman测试方法之外,测试post请求的另一种方法是使用ajax在jquery中发送post请求,下面是一个示例:

        <script>
            $(function () {
                $("#send").click(function () {
                    var personalInfo = { Id:  $('#Id').val(), Name: $('#Name').val() };
                    $.ajax({
                        url: 'http://localhost:50855/api/Exam/PostValue',
                        type: 'POST',
                        contentType: "application/json; charset=utf-8",
                        dataType: 'json',
                        data: JSON.stringify(personalInfo),
                        //success: function (data, textStatus, xhr) {
                        //    console.log(data);
                        //},
                        //error: function (xhr, textStatus, errorThrown) {
                        //    console.log('Error in Operation');
                        //}
                    });
                });
            })
        </script>

   <form id="form1">
        Id : <input type="text" name="Id" id="Id" />
        Name: <input type="text" name="Name" id="Name" />
        <input type="button" id="send" value="Send Post Data" />
    </form>

$(函数(){
$(“#发送”)。单击(函数(){
var personalInfo={Id:$('#Id').val(),Name:$('#Name').val();
$.ajax({
网址:'http://localhost:50855/api/Exam/PostValue',
键入:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
数据:JSON.stringify(personalInfo),
//成功:函数(数据、文本状态、xhr){
//控制台日志(数据);
//},
//错误:函数(xhr、textStatus、errorshown){
//console.log(“操作错误”);
//}
});
});
})
身份证件:
姓名:
以下是测试结果:

除了postman测试方法之外,测试post请求的另一种方法是使用ajax在jquery中发送post请求,下面是一个示例:

        <script>
            $(function () {
                $("#send").click(function () {
                    var personalInfo = { Id:  $('#Id').val(), Name: $('#Name').val() };
                    $.ajax({
                        url: 'http://localhost:50855/api/Exam/PostValue',
                        type: 'POST',
                        contentType: "application/json; charset=utf-8",
                        dataType: 'json',
                        data: JSON.stringify(personalInfo),
                        //success: function (data, textStatus, xhr) {
                        //    console.log(data);
                        //},
                        //error: function (xhr, textStatus, errorThrown) {
                        //    console.log('Error in Operation');
                        //}
                    });
                });
            })
        </script>

   <form id="form1">
        Id : <input type="text" name="Id" id="Id" />
        Name: <input type="text" name="Name" id="Name" />
        <input type="button" id="send" value="Send Post Data" />
    </form>

$(函数(){
$(“#发送”)。单击(函数(){
var personalInfo={Id:$('#Id').val(),Name:$('#Name').val();
$.ajax({
网址:'http://localhost:50855/api/Exam/PostValue',
键入:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
数据:JSON.stringify(personalInfo),
//成功:函数(数据、文本状态、xhr){
//控制台日志(数据);
//},
//错误:函数(xhr、textStatus、errorshown){
//console.log(“操作错误”);
//}
});
});
})
身份证件:
姓名:
以下是测试结果:

好的,我一直在阅读有关通过输入web.config删除WebDav的内容,但这对我的core 3.1不起作用。您需要做的是通过以下方式将其从IIS中删除:

  • 在IIS 8中展开服务器
  • 选择站点
  • 单击处理映射(对于站点而不是服务器)
  • 搜索WebDav并将其删除
  • 重新启动IIS
  • Web.config应该单独处理。当我添加remove name=WebDav时,我的API停止工作

      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
    
    
    

    注意:如果服务器上的WebDav不起作用,您可能还需要从服务器上删除它,因为我在排除故障时先删除了它。

    好的,所以我一直在阅读有关通过输入web.config来删除WebDav的内容,但这对我的core 3.1不起作用。您需要做的是通过以下方式将其从IIS中删除:

  • 在IIS 8中展开服务器
  • 选择站点
  • 单击处理映射(对于站点而不是服务器)
  • 搜索WebDav并将其删除
  • 重新启动IIS
  • Web.config应该单独处理。当我添加remove name=WebDav时,我的API停止工作

      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
    
    
    

    注意:如果服务器上的问题无法解决,您可能还需要从服务器上删除该问题,因为我在排除故障时首先删除了该问题。

    我只想将我的问题和解决方案添加到此线程中,以防其他人意外发现此问题

    我收到了一个405错误代码,尽管操作被HttpPost和ValidateAntiForgeryToken属性修饰,并确保发布的表单数据包含防伪标记。本地的一切都很好,但当我把所有东西都放到服务器上时,我就开始接收405错误。事实证明,这个错误与我在应用程序中所做的事情无关。这实际上是MySQL数据库中存储过程中的一个问题。在本地,区分大小写不是一个问题,但在服务器上,我将一个表的名称用小写字母大写,这导致出现一个错误,并给出了这个非常模糊的405错误

    我想这里学到的教训是检查一切:)


    编辑:为了清楚起见,我的问题与MySQL和Linux托管有关。不确定如果使用Windows托管解决方案,是否也适用此问题。我只想将我的问题和解决方案添加到此线程中,以防其他人偶然发现此问题

    我收到了一个405错误代码,尽管操作被HttpPost和ValidateAntiForgeryToken属性修饰,并确保发布的表单数据包含防伪标记。本地的一切都很好,但当我把所有东西都放到服务器上时,我就开始接收405错误。事实证明,这个错误与我在应用程序中所做的事情无关。这实际上是一个问题