我創建了一個簡單的web api服務到GET & POST用戶數據。WebApi Post方法總是返回「請求的資源不支持http方法'GET'。」狀態:405方法不允許
Localhost的每一件事情都很好。但是當我在服務器上託管服務時,當我從PostMan/Browser調用它時,Get Method工作正常。但Post方法總是返回「請求的資源不支持http方法'GET'。」狀態:405不允許的方法。
我得到的一件事讓我感到困惑,即我要求POST調用,但狀態消息顯示我'GET'錯誤。爲什麼它應該是?如果是CORS問題?我通過在應用程序級(Web.Config以及Nuget Package Manager Cors)上搜索互聯網上的答案,嘗試了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"));
}
}
頭以上郵遞員請求
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
感謝您的幫助!這個錯誤被浪費了一天。
你是如何調用這個API?以及哪種方法? –
通過郵政人我打電話。方法是SaveUser&SaveUserModel。附加PostMan請求和響應圖像。以及粘貼頭 –
確定?你選擇POST? –