2016-11-16 703 views
2

我創建了一個簡單的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")); 
    } 
} 

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 

感謝您的幫助!這個錯誤被浪費了一天。

+1

你是如何調用這個API?以及哪種方法? –

+0

通過郵政人我打電話。方法是SaveUser&SaveUserModel。附加PostMan請求和響應圖像。以及粘貼頭 –

+0

確定?你選擇POST? –

回答

0

這裏是

ASP.NET WebApi : (405) Method Not Allowed

最後我在web.config中改變了無Cookie =「自動檢測」,以無Cookie =「UseCookies」你的問題的解決方案,並解決了這個問題。

0

如果你還沒有啓用CORS裝飾你的控制器如下。

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

在webapiconfig中也放入了belo代碼。CS文件

config.EnableCors(); 

如果你是如下承載您的端點在公共API,然後 裝修控制器。

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

然後得到例如,

//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}")] 
相關問題