難道沒有人吐槽 Asp.net Web Api 的嗎


一個APP新項目為了趕時髦,用上了Asp.net Web API,可能我不是太熟悉,經過我幾天潛心研究,web api 確實沒啥用,簡直屬於狗尾續貂之作。

新創建一個api controller,大概方法如下

public IEnumerable<string> Get();
public string Get(int id);
public void Post([FromBody]string value);
public void Put(int id, [FromBody]string value);
public void Delete(int id);

 

這幾個方法的返回值顯然不能滿足要求,比如,當iOS或Andriod端請求刪除 ,刪除有沒有成功,無從知曉,所以必須對返回結果進行包裝,類似

public class MyResponse
    {
        public int ErrCode { get; set; }
        public string ErrMsg { get; set; }
        public object Data { get; set; }
    }

 

那么 api controller 方法變成

public MyResponse Get();
public MyResponse Get(int id);
public MyResponse Post([FromBody]string value);
public MyResponse Put(int id, [FromBody]string value);
public MyResponse Delete(int id);

那么問題來了------------------------------------------------

1.在 public MyResponse Get(int id); 方法中,如果Content-Type為 application/xml,那么則會報序列化錯誤,有沒有,不能很方便的返回XML,我的解決方法是:在global里移除XmlFormatter,客戶端一律用 application/json請求

public MyResponse Get(int id)
{
            var model = UserRepository.Find(id);
            return new MyResponse()
            {
                Data = model
            };
 }

如果這樣的話,為什么不用mvc中的 JsonResult呢?

 

2.我很明白web api設計的初衷,什么語義啊,什么資源啊,但就這么幾個方法也嚴重不夠用啊,比如 User中,需求就有注冊,登錄,修改密碼,修改資料,驗證用戶名唯一性等,一個GET PUT POST DELETE怎么夠用,當然我知道還有其他的type,但那些英文單詞太生澀,難道告訴終端的朋友這個用 LOCK,那個用 SEARCH? 所以最后我又改了路由,類似

config.Routes.MapHttpRoute(
                name: "ActionApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

然后在 action 上打上 HttpPost HttpPut。等等,都這個樣了,為什么不用MVC,MVC中action不一樣可以打上 get post

 

 

3.以為這就結束了,不,做終端的同事說,你那個帶PUT的方法,根本用不了啊。也許,像AppCan這種中間件,也許就只支持GET,POST,在我最后把HttpPut改為 HttpPost后,一切都好了

 

 

再來看所謂的Web Api,這還是Web Api嗎? 其實跟MVC里用JsonResult 沒啥兩樣,不知道微軟為什么出這么個玩意兒??

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM