WebApi Post方法始终返回"请求的资源不支持http方法'GET'。&Quot;状态:405方法不允许 [英] WebApi Post Methods always Returns "The requested resource does not support http method 'GET'." Status: 405 Method Not Allowed

查看:53
本文介绍了WebApi Post方法始终返回"请求的资源不支持http方法'GET'。&Quot;状态:405方法不允许的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个简单的Web API服务来获取和发布用户数据和amp;

在localhost上一切都很好。但是当我在服务器上托管服务时,当我从邮递员/浏览器调用Get方法时,它工作得很好。但是Post方法总是返回"请求的资源不支持http方法‘get’"。状态:不允许使用405方法

这里我搞混了一件事,即我请求了POST调用,但是状态消息显示我‘GET’错误。为什么会这样呢?如果是CORS问题?我也尝试了在不同的场景/方面启用CORS,方法是在互联网上搜索应用程序级的答案(Web.Config以及Nuget Package Manager 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; }
}

Web.Config

Web.Config File Pasted here in Image

WebApi.Config

命名空间

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web.Http;
using System.Web.Http.Cors;

WebApiConfig类

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"));
    }
}

PostMan Request & Response

上述邮递员请求的标题

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

谢谢您的帮助!!为此错误浪费了一天时间。

推荐答案

我知道这是一个古老的帖子,但是,对于正在寻找此问题解决方案的其他人来说。我遇到了这个问题,并意识到我正在使用http发布到我的webapi上,但是IIS将我的请求重定向到https。此重定向导致邮递员将邮件更改为GET。将我的URL更改为https已为我解决此问题。

这篇关于WebApi Post方法始终返回&quot;请求的资源不支持http方法&#39;GET&#39;。&Quot;状态:405方法不允许的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆