MVC Web API 重要注意事項

在已完成的MVC專案 新加入 WEB API 功能

Controllers 加入 控制器 "具有讀取/寫入 Web Api 2"

第一次加入後 假設加入 "MyApi"
會跳出一個txt檔
Visual Studio 已將 ASP.NET Web API 2 的 整組 相依性新增至專案 'Web_API_Test'。
專案中的 Global.asax.cs 檔案需要其他變更,才能啟用 ASP.NET Web API。
1. 新增下列命名空間參考:
    using System.Web.Http;
    using System.Web.Routing;
2. 如果程式碼尚未定義 Application_Start 方法,請新增下列方法:
    protected void Application_Start()
    {
    }
3. 將以下幾行新增至 Application_Start 方法的開頭處:
    GlobalConfiguration.Configure(WebApiConfig.Register);
以上內容
看起來就是在  Application_Start 加入一行
啟動後
連  http://xx.xx.xx.xx/api/MyApi
可是一直 找不到資源
搞死我 後來查到原因
這行偷懶加到最後
 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);           GlobalConfiguration.Configure(WebApiConfig.Register);            
        }
就永遠 找不到資源
一定要這樣擺
 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
         
        }
連  http://xx.xx.xx.xx/api/MyApi  就好了
就這樣 挖哩勒
 AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);// web api 一定要放這裡
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();//選擇將 XML 回應支援的回應給關閉
關閉後 回應會是 json 格式
//********************************************************
Wep Api  回傳時用 class 傳 會自動轉成 json
public class Api_data
    {
        public int ag_count = 0;
    }
public Api_data Get(int id)
        {
            Api_data ap = new Api_data();
            switch(id)
            {
                case 9:
                    ap.ag_count = 99;
                    return ap;
           }
            return ap;
        }
************* 收 *******
 HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(@"http://localhost:45691/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            // List data response.
            HttpResponseMessage response = client.GetAsync(@"api/myapi/9").Result;  // 
            if (response.IsSuccessStatusCode)
            {
                var body = response.Content.ReadAsStringAsync().Result;
                Api_data product = JsonConvert.DeserializeObject<Api_data>(body);//轉成 json
                Ag_live = product.ag_count;
            }
            else
            {
                //Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
            }  
*****************************************
本來是要用 await client.GetAsync(@"api/myapi/9").Result;
等回應再處理
但是這是塞在 MVC 裏頭跑 好像不行 所以拿掉
*******************
如果是送
http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client
裏頭有方法
ar gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
response = await client.PostAsJsonAsync("api/products", gizmo);
if (response.IsSuccessStatusCode)
{
    // Get the URI of the created resource.
    Uri gizmoUrl = response.Headers.Location;
}
所以完整的是

  public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);// web api 一定要放這裡
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();//選擇將 XML 回應支援的回應給關閉
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }









留言

熱門文章