WebApi Post方法总是返回'请求的资源不支持http方法'状态:405方法不允许

本文关键字:方法 http 不支持 状态 不允许 资源 返回 Post WebApi 请求 | 更新日期: 2023-09-27 18:18:28

我创建了一个简单的web api服务GET &POST用户数据

一切都很好在Localhost。但是当我在服务器上托管服务时,当我从邮差/浏览器调用它时,Get方法工作正常。但是Post方法总是返回"请求的资源不支持http方法'GET'。"状态:405 Method Not Allowed

有一件事我在这里感到困惑,即我请求POST调用,但状态信息显示我'GET'错误。为什么会这样呢?如果是CORS问题?我通过在应用程序级别(Web)的互联网上搜索答案,尝试了CORS启用各种场景/方面。配置以及Nuget包管理器Cors)。仍然得到405方法不允许。下面粘贴我的API代码:

控制器名称空间:

  using MySql.Data.MySqlClient;
  using System;
  using System.Collections.Generic;
  using System.Data;
  using System.Linq;
  using System.Net;
  using System.Net.Http;
  using System.Web.Http;
  using System.Web.Http.Cors;
控制器

  public class UsersController : ApiController
  {
    [Route("api/Users/GetUsers/{UserId}")]
    [HttpGet]
    public IEnumerable<User> GetUsers(int UserId)
    {
        try
        {
            List<User> userlist = new List<User>();
            MySqlCommand cmd = new MySqlCommand("GetUsers");
            cmd.Parameters.AddWithValue("aUserId", UserId);
            cmd.CommandType = CommandType.StoredProcedure;
            DataTable dt = obj.GetData(out ErrorMsg, cmd);
            // Did Some Stuff and Returns Model;
            return userlist;
        }
        catch(Exception ex)
        {
            // Written Error Log & Returns Empty Model;
        }
    }
    [Route("api/Users/SaveUser")]
    [HttpPost]
    public IEnumerable<User> SaveUser([FromBody]dynamic request)
    {
        try
        {
            string UserName = request.Param_Name;
            string Email = request.Param_Email;
            List<User> userlist = new List<User>();
            MySqlCommand cmd = new MySqlCommand("UserSave");
            cmd.Parameters.AddWithValue("aUserName", UserName);
            cmd.Parameters.AddWithValue("aEmail", Email);
            cmd.CommandType = CommandType.StoredProcedure;
            DataTable dt = obj.GetData(out ErrorMsg, cmd);
            UserAuthenticate userdata;
            // Did Some Stuff and returns UserModel;
            return userlist;
        }
        catch(Exception Ex)
        {
            // Written Error Log & Returns Empty Model with Error Message;
        }
    }
    [Route("api/Users/SaveUserModel")]
    [HttpPost]
    public IEnumerable<User> SaveUserModel([FromBody]User request)
    {
        try
        {
            string Param_UserName = request._UserName;
            string Param_Email = request._Email;
            List<User> userlist = new List<User>();
            MySqlCommand cmd = new MySqlCommand("UserSave");
            cmd.Parameters.AddWithValue("aUserName", Param_UserName);
            cmd.Parameters.AddWithValue("aEmail", Param_Email );
            cmd.CommandType = CommandType.StoredProcedure;
            DataTable dt = obj.GetData(out ErrorMsg, cmd);
            UserAuthenticate userdata;
            // Did Some Stuff and returns UserModel;
            return userlist;
        }
        catch(Exception Ex)
        {
            // Written Error Log & Returns Empty Model with Error Message;
        }
    }
 }

public class User
{
    public int _UserID { get; set; }
    public string _Email { get; set; }
    public string _UserName { get; set; }
}

网络。配置

网络。配置文件粘贴到图片

之前。配置

名称空间

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
using System.Web.Http.Cors;
<<p> WebApiConfig类/strong>
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}

邮差请求&响应

Access-Control-Allow-Methods →*
Access-Control-Allow-Origin →*
Access-Control-Request-Headers →: *
Access-Control-Request-Method →: *
Allow →POST
Cache-Control →no-cache
Content-Length →72
Content-Type →application/json; charset=utf-8
Date →Wed, 16 Nov 2016 17:50:03 GMT
Expires →-1
Pragma →no-cache
Server →Microsoft-IIS/7.5
X-AspNet-Version →4.0.30319

谢谢你的帮助!这个错误浪费了一天的时间

WebApi Post方法总是返回'请求的资源不支持http方法'状态:405方法不允许

我知道这是一个旧的帖子,但是,对于其他任何人寻找解决这个问题的方法。我有这个问题,并意识到我是张贴到我的webapi使用http,但IIS重定向我的请求到https。此重定向导致邮差将POST更改为GET。将我的URL更改为https为我解决了这个问题。

这就是你的问题的解决办法

ASP。. NET WebApi: (405) Method Not Allowed

最后我改变了cookie ="AutoDetect"在web。config to cookieless="UseCookies",问题就解决了。

如果您没有启用CORS,请按如下方式装饰您的控制器。

  [EnableCors(origins: "*", headers: "*", methods: "GET, POST, PUT, DELETE")] 

也把下面的代码放到webapiconfig.cs文件

  config.EnableCors();

如果你在公共api中托管你的端点,那么如下图装饰控制器

 [RoutePrefix("api/users")]
    public class usersController : ApiController

然后Get,例如

   //Get http:192.168.0.0:2210/api/users/
      [Route("~/api/users")]
     //POST  http:192.168.0.0:2210/api/users/
     [Route("~/api/users")] 
    //Get on id
     //POST  http:192.168.0.0:2210/api/users/
     [Route("~/api/users/{id}")]