vs2012 + web api + OData + EF + MYsql

來源:互聯網
上載者:User

標籤:

vs2012 + web api + OData + EF + MYsql 開發及部署

先說下我的情況,b/s開發這塊已經很久沒有搞了,什麼web api 、MVC、OData都只是聽過,沒有實際開發過,因為最近要開發一個手機app的服務端,所以準備用這套架構來開發。

下面開始進入正題(我盡量將自己開始寫代碼遇到的所有問題還原,以便以後提醒自己,文章是在我開發部署完畢後開始寫的,所以有些地方有遺漏,還請見諒)

1:首先用vs2012建立一個“asp.net 空 web 應用程式”,(注意,我選擇的是.net 4.0版本,原因後面會解釋)

2:這個時候項目應該是空白的一片,什麼都沒有。首先我們要在項目引用中添加幾個dll的引用“System.Web.Http,System.Web.Http.WebHost,System.Net.Http,Newtonsoft.Json”

  除了Newtonsoft.Json,其他三個dll可以直接在引用裡面找到,Newtonsoft.Json需要用“封裝管理員控制台”來載入,命令如下“install-package Newtonsoft.Json”,不區分大小寫

3:建立model、controller檔案,在項目中的位置自己定義,檔案代碼內容如下:

    public class User    {        public string UserID { get; set; }        public string UserName { get; set; }    }
 public class UserController : ApiController    {        public User Get()        {            return new User() { UserID = "000", UserName = "Admin" };        }        public bool add(User user)        {            return user != null;        }    }

(以上代碼是我在網上找demo時搜到的,並非自己原創,大家見諒)

3:建立路由規則,(這塊應該是屬於MVC的知識,只是以前由vs自動建立,現在由自己手寫)

定義一個類

public class WebApiConfig{        public static void Register(HttpConfiguration config)        {            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{id}",                defaults: new { id = RouteParameter.Optional }            );                    } }

然後自己手動添加一個Global檔案,並添加以下代碼

protected void Application_Start(object sender, EventArgs e){    WebApiConfig.Register(GlobalConfiguration.Configuration);}

Ok,到這裡為止,一個由vs2012建立的web api程式已經完成。

啟動vs,在瀏覽器輸入“localhost:連接埠號碼/api/user”就可以訪問了

(以上代碼參考網路資料,請原諒我忘記原始地址了.)

 

一直到上面的代碼,都很順利,至少我在開發的過程中沒有遇到過問題,下面開始,就會出現各種問題。

現在開始添加對OData的支援,利用NuGet來添加對OData的支援

,會出現兩個選擇,一個是v1-3,一個是v4版本的。這裡我選擇的是v1-3的,因為聽說v4版本好像還不太穩定。

(說一下我在這裡遇到的問題,一開始建立項目時選擇的是.net 4.0版本的,如果選擇的是4.5預設版本的話,添加 Odata v4版本會提示對4.5不支援之類的資訊,如果添加OData v1-3版本的話,在添加成功後,運行項目,

這時候項目時會報錯的,請原諒我才疏學淺,沒有搞清楚是什麼原因就放棄了。因為我發現使用.net 4.0版本添加OData v1-3項目是不報錯的,當然這也是我試過很多解決方案後解決的)

 

添加OData組件後,需要在項目中做一些修改,針對Controller檔案,將UserController的代碼修改如下:

[Queryable]public IQueryable<User> get() {    return new User[] { new User() { UserID = "000", UserName = "Admin" } }.AsQueryable();}

ok,就是這麼簡單,現在可以在瀏覽器中瀏覽資料了,我這裡只做了一條資料,所以瀏覽時看不出什麼效果

如果多做幾條資料,用如下url是可以正確訪問的:

localhost:連接埠/api/user?$top2

localhost:連接埠/api/user?$filter=UserId eq ‘000‘

請注意一點,OData是大小寫敏感的。

 

OK,下面開始用EF添加對Mysql的支援。

首先需要下載安裝組件:“mysql-connector-net-6.6.7.msi” ,這個在官網上下載就好了,不過要註冊,有點麻煩.

然後安裝ef,使用“封裝管理員控制台”來載入,命令如下“install-package entityframework”,

安裝好之後,重啟vs,在項目裡面選擇“建立項”

選擇,填好名稱,點擊添加

這裡有些版本的選擇會不一樣,我的只有這兩個選項,選擇“從資料庫產生”即可,點擊下一步

這裡填寫你的Mysql的ip、使用者名稱、密碼確定即可。

(在安裝“mysql-connector-net-6.6.7.msi” 時,如果你的開發機器安裝過mysql的相關軟體,可能會出一些問題,一般是在“程式和功能”中將原來的刪除掉,

安裝新的就可以了,不然會在選擇資料來源時,沒有“Mysql database”這個選項)

這時在項目中會出現一個“*.edmx”檔案,這就是ef建立的檔案

這時建立一個Controller檔案,自己隨意命名,代碼如下:

public class ProductController : ApiController    {        [Queryable(AllowedOrderByProperties = "id", AllowedQueryOptions = AllowedQueryOptions.All)]        public IQueryable<map_goodsdiscount> Get()        {            var db = new testEntities();            return db.map_goodsdiscount.AsQueryable();        }    }

其中:

map_goodsdiscount是你在Mysql中對應的資料表名稱,
testEntities是你用EF建Mysql資料來源填寫的名稱
Queryable屬性中AllowedOrderByProperties 表示預設排序按照“id”欄位
AllowedQueryOptions 屬性控制Odata查詢條件,比如

到這裡為止,所有代碼都已經寫完,如果有什麼遺漏的,發現之後,我再添加上去。

下面開始部署,部署環境為windows server 2008 r2,已經安裝4.0環境,這裡將部署時注意的事項一併列出來
1:項目中ef的版本問題,預設是4.5的,部署時需要刪除entityframework引用,並添加4.0版本的dll,我原生4.0地址為:

C:\Program Files (x86)\Microsoft Web Tools\Packages\EntityFramework.5.0.0\lib\net40
修改設定檔web.config為如下格式:
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

 

2:如果在部署的時候遇到404錯誤,添加以下代碼在web.config

<system.webServer>  <validation validateIntegratedModeConfiguration="false" />  <modules runAllManagedModulesForAllRequests="true" />    <handlers>    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />    </handlers>  </system.webServer>

 

一直到這裡,我的項目從開發到部署就已經全部完成了,其中出了很多問題,都是網上找的資料,加上自己的一點點經驗解決的,希望對其他人會有一點點協助。

 

 

  標籤: web api ef odata mysql

vs2012 + web api + OData + EF + MYsql

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.