MVC Web API 重要注意事項
在已完成的MVC專案 新加入 WEB API 功能
會跳出一個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
裏頭有方法
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);
}
}
在 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);
}
}
留言
張貼留言