1.上面已經教大家如何修改全局路由了,那么修改完后我們在post請求的要這樣使用,其中model模型我就默認你應該已經建好了,沒有創建的話請看上一部分
Post方法的參數,如果提交的請求體需要是phoneNum=123&password=123這樣的格式。如果用string AddNew(string phoneNum, string password)這種普通參數會有很多的坑(參考《C#進階系列—— WebApi 接口參數不再困惑:傳參詳解》),所以不要用。都用模型對象,public string AddNew2(LoginModel model),也可以參數標注[FromBody]:public string AddNew2([FromBody]LoginModel model)。(只能有一個參數標注FromBody)。

[HttpPost] public bool Login4(LoginModel model)//也可以參數標注[FromBody]LoginModel model { if (model.phoneNum == "123" && model.password == "123") { return true; } else { return false; } }
2.通過自定義路由規則來捕獲參數
WebAPI可以通過[Route]和[RoutePrefix]來自定義路由,[RoutePrefix]作用於Controller,[Route]作 用於Action,一旦一個Controller或者Action設置了[Route]、[RoutePrefix]那么設置的routeTemplate講在 這個Controller或者Action中就不起作用了。
(1)[Route]自定義路由

[Route("Login/{phoneNum}/{password}")] [HttpGet] public string Login5(string phoneNum, string password) { return string.Format("Login5-->phoneNum:{0},password:{1}", phoneNum, password); }
(2)每個方法都[Route]自定義太麻煩,[RoutePrefix]作用於Controller適用內部所有方法

//當然每個Action都設定api/Login很麻煩,可以在Controller上標注[RoutePrefix("api/Login")](路徑不能以/結尾) [RoutePrefix("api/Login")] public class LoginController : ApiController { [HttpGet] public string LoginAction(string phoneNum, string password) { return string.Format("Login-->phoneNum:{0},password:{1}", phoneNum, password); } }
總結:
1.如果使用 Post 請求,那么就需要每個方法都聲明一個參數對應的類,參數前可標注[FromBody]。
2.如果使用 Get 請求,那么參數比較自由,但是需要注意防范緩存(使用 ajax 的話加上一個當前時間或者 隨機數的參數,使用 HttpClient 等需要禁用緩存)。
3.如果用 Get 方式,參數既可以用普通參數也可以用模型類參數,需要注意防止緩存;如 果 用 Post 方 式 , 參 數 一 定 要 用 模 型 類 , 客 戶 端 既 可 以 用 ContentType=” application/x-www-form-urlencoded”提交表單,也可以用 ContentType=”application/json”提交。
4.路由設置的話根據項目情況設置,適合的才是好的,切記不要搞得太亂。