1. WebAPI與傳統的WebService有哪些不同
WebService是利用HTTP管道實現了RPC的一種規范形式,放棄了對HTTP原生特徵與語義的完備支持;而WebAPI是要保留HTTP原生特徵與語義的同時實現RPC,但WebAPI的實現風格可以是千姿百態,RESTful只是實現了其中一種風格,你也可以定義一種風格,並實現
WebAPI相比WebService更為輕量級、靈活、優化好的情況下,性能更有優勢,但是對復雜或大型業務的描述與使用增加了無形的成本
WebAPI可以更好的利用HTTP與生俱來的特徵,如:緩存、代理、安全、頭信息擴展,反之,部分實現方式WebService無法利用HTTP特徵
本質上WebAPI與傳統模式的WebService都是實現RPC,遠程服務;傳統的WebService只是利用了HTTP通道,進行獨立的交互,但是這個交互協議可以移植到其他協議下運作,而WebAPI天生與HTTP依賴無法移植
WebService與WebAPI在80埠下工作,都可以繞開默認的網路防火牆限制,因為默認下網路防火牆對系統級埠與協議下的內容是開放的
WebService與RESTfulWebAPI服務端都可以使用反射來實現自動化部署,只是前者更為容易,因為存在標準的規范,後者只是開發WebAPI的推薦風格,實現上需要自己來規范與描述,處理不兼容問題;WebAPI在無反射下的業務實現更為直觀接近MVC模式下的開發的應用,通用,性能更好、更為靈活,能夠直接利用HTTP的動態網頁技術開發介面與功能
WebAPI對於交互數據的格式沒有明確規定,使得其可以更好的使用在特定的軟體運行平台,但是需要開發者對各種格式的支持;傳統的WebService則要求使用服務的平台對數據格式強制適應,服務端的交互數據處理變得更加快捷容易,而增加了不同使用端的對服務交互困難度
2. c#webapi不能單獨運行嗎
WebApi是個類似於WebService的服務, 服務是需要宿主的,WebApi可以寄宿在IIS或者普通應用程序中。
但是其本身肯定是無法獨立運行的,因為服務就沒有「運行」這個概念。
3. WebApi內置跨域功能,為什麼我就實現不了
在Web.config的system.webServer配置節下增加配置
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
</customHeaders>
</httpProtocol>
如果通過jquery 跨域訪問,在伺服器端和客戶端需要分別配合:
1. 在伺服器端,需要為每一個請求進行授權。例如在消息頭中要有
Access-Control-Allow-Origin:*
2. 在客戶端要寫
jQuery.support.cors = true;
4. 創建C#的wpf項目(C/S架構),不知道C/S架構中能不能用webapi,請高人解答,謝謝!
首先 ,你要明白瀏覽器也是客戶端,只不過他提供的是一套通用的解釋方式,具體執行程序放在了伺服器上,伺服器應用跟本地應用,本質上無差異,基本都是Sever+客戶端處理,WPF是可以調用web api的 sever收到http請求可不管你是誰 是什麼樣的客戶端發來的 只要是正確的http請求 就能響應,
5. 想學web前端需要學什麼知識
隨著互聯網的發展,各種小程序、APP以及很多的互聯網+創業公司的興起,對現在前端工程的要求也越來越高,如何適應目前IT行業時代的發展趨勢,web前端工程師又需要掌握那些技能呢?
一、HTML5+CSS3
HTML是網頁的主要組成部分,網頁的本質就是HTML,是用來製作超文本文檔的簡單標記語言;CSS樣式是對HTML語言的有效補充,通過使用CSS樣式,便於頁面的修改以及頁面風格的統一,還可以減少頁面的體積,通過HTML和CSS完成靜態頁面的布局。HTML5+CSS3是HTML+CSS的更新,增加了很多非常實用的功能。這部分主要是從PC端和移動端兩方面掌握整體的頁面布局技術,並且配合項目實戰操練、學以致用。
二、JS交互設計
這一部分主要掌握JS的基本語法、演算法和高級語法,熟練使用面向對象的思想進行DOM編程,通過JQuery經典案例學習精通JQuery技術。
通過以上介紹,相信大家都了解了web前端開發需要學習的內容了,現在隨著行業而發展,對前端的要求也越來越高,對高端人才的需求也越來越多,只有大家掌握的知識越多,掌握的技能越全面,越好,之後的選擇權才會更多,發展前景更好。
6. c#webapi介面怎麼加上安全校驗
下面這幾個注意事項或許可以幫你一些
1. 找到Web應用所有的輸入點,找到所有的能接受用戶輸入的地方,漏掉輸入點也就漏掉了可能存在的縫。
2. 過濾每一個輸入點,為每個輸入點設定相應的校驗規則和邊界。
3. 不要忘記校驗哪些隱藏域,cookie和url參數。
4. 驗證從資料庫裡面得到的數據,這個是最容易忽視的地方,不要相信來自資料庫裡面的數據就是合法的數據。
5. 你是如何做輸入校驗的? javascript?如果只是用javascript做客戶端校驗, 風險還是很大的,一定要確保加上服務端的校驗,否則如果客戶端禁用了javascript或者客戶端代碼被人工修改,非法數據還是會進入系統內部的。
6. 隱藏異常信息,再周全的校驗也不可能覆蓋所有的case,如果非法數據造成了系統的異常,不要將詳細的異常信息暴露給客戶端,這些異常信息有可能成為系統的攻擊入口。
在做輸入校驗的時候,從「什麼樣的輸入才是合法的」入手會降低驗證失效的風險,應該只為每個輸入點的輸入內容制定一個有限的,剛好夠用的合法范圍,除此之外的所有內容都當做是非法的。而從「什麼樣的輸入是不合法的」入手則會增加驗證失效的可能,因為你不可能窮舉非法的輸入。
7. 用MVC WebApi寫介面,網閘上了之後,方法訪問不到,埠已經全部開放
VisualStudio為我們提供了專門用於創建ASP.NETWebAPI應用的項目模板,藉助於此項目模板提供的向導,我們可以「一鍵式」創建一個完整的ASP.NETWebAPI項目。在項目創建過程中,VisualStudio會自動為我們添加必要的程序集引用和配置,甚至會為我們自動生成相關的代碼,總之一句話:這種通過向導生成的項目在被創建之後其本身就是一個可執行的應用。對於IDE提供的這種旨在提高生產效率的自動化機制,我個人自然是推崇的,但是我更推薦讀者朋友們去了解一下這些自動化機制具體為我們做了什麼?做這些的目的何在?哪些是必需的,哪些又是不必要的?正是基於這樣的目的,在接下來演示的實例中,我們將摒棄VisualStudio為我們提供的向導,完全在創建的空項目中編寫我們的程序。這些空項目體現在如右圖所示的解決方案結構中。如右圖所示,整個解決方案一共包含6個項目,上面介紹的作為「聯系人管理器」的單頁Web應用對應著項目WebApp,下面的列表給出了包括它在內的所有項目的類型和扮演的角色。·Common:這是一個空的類庫項目,僅僅定義了表示聯系人的數據類型而已。之所以將數據類型定義在獨立的項目中,只要是考慮到它會被多個項目(WebApi和ConsoleApp)所使用。WebApi:這是一個空的類庫項目,表現為HttpController類型的WebAPI就定義在此項目中,它具有對Common的項目引用。WebHost:這是一個空的ASP.NETWeb應用,它實現了針對ASP.NETWebAPI的WebHost寄宿,該項目具有針對WebApi的項目引用。SelfHost:這是一個空的控制台應用,旨在模擬ASP.NETWebAPI的SelfHost寄宿模式,它同樣具有針對WebApi的項目引用。WebApp:這是一個空的ASP.NETWeb應用,代表「聯系人管理器」的網頁就存在於該項目之中,至於具體的聯系人管理功能,自然通過以Ajax的形式調用WebAPI來完成。ConsoleApp:這是一個空的控制台應用,我們用它來模擬如何利用客戶端代理來實現對WebAPI的遠程調用,它具有針對Common的項目引用。二、定義WebAPI在正式定義WebAPI之前,我們需要在項目Common中定義代表聯系人的數據類型Contact。簡單起見,我們僅僅為Contact定義了如下幾個簡單的屬性,它們分別代表聯系人的ID、姓名、聯系電話、電子郵箱和聯系地址。1:publicclassContact2:{3:publicstringId{get;set;}4:publicstringName{get;set;}5:publicstringPhoneNo{get;set;}6:publicstringEmailAddress{get;set;}7:publicstringAddress{get;set;}8:}表現為HttpController的WebAPI定義在WebApi項目之中,我們一般將ApiController作為繼承的基類。ApiController定義在「System.Web.Http.dll」程序集中,我們可以在目錄「%ProgramFiles%\MicrosoftASP.NET\ASP.NETWebStack5\Packages\」中找到這個程序集。具體來說,該程序集存在於子目錄「Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45」中。WebAPI體現在如下所示的ContactsController類型中。在該類型中,我們定義了Get、Post、Put和Delete這4個Action方法,它們分別實現了針對聯系人的查詢、添加、修改和刪除操作。Action方法Get具有一個表示聯系人ID的可預設參數,如果該參數存在則返回對應的聯系人,否則返回整個聯系人列表。由於ASP.NETWebAPI默認實現了Action方法與HTTP方法的映射,所以方法名也體現了它們各自所能處理請求必須採用的HTTP方法。1:publicclassContactsController:ApiController2:{3:staticListcontacts;4:staticintcounter=2;5:6:staticContactsController()7:{8:contacts=newList();9:contacts.Add(newContact{Id="001",Name="張三",10:PhoneNo="0512-12345678",EmailAddress="[email protected]",11:Address="江蘇省蘇州市星湖街328號"});12:contacts.Add(newContact{Id="002",Name="李四",13:PhoneNo="0512-23456789",EmailAddress="[email protected]",14:Address="江蘇省蘇州市金雞湖大道328號"});15:}16:17:publicIEnumerableGet(stringid=null)18:{19:returnfromcontactincontacts20:wherecontact.Id==id||string.IsNullOrEmpty(id)21:selectcontact;22:}23:24:publicvoidPost(Contactcontact)25:{26:Interlocked.Increment(refcounter);27:contact.Id=counter.ToString("D3");28:contacts.Add(contact);29:}30:31:publicvoidPut(Contactcontact)32:{33:contacts.Remove(contacts.First(c=>c.Id==contact.Id));34:contacts.Add(contact);35:}36:37:publicvoidDelete(stringid)38:{39:contacts.Remove(contacts.First(c=>c.Id==id));40:}41:}簡單起見,我們利用一個靜態欄位(contacts)表示存儲的聯系人列表。當ContactsController類型被載入的時候,我們添加了兩個ID分別為「001」和「002」的聯系人記錄。至於實現聯系人CRUD操作的Action方法,我們也省略了必要的驗證,對於本書後續的演示的實例,我們基本上也會採用這種「簡寫」的風格。
8. asp.net webapi 個人身份驗證 token
重寫AuthorizeAttribute,對你想要禁用的token拋出UnAuthorized
9. MVC WebApi在調試開發下訪問正常,部署到伺服器訪問不到介面
1、伺服器是否正常啟動(查看日誌)
2、伺服器的IP+PORT是否可以訪問,查看埠是否被佔用
3、若服務正常啟動,埠也可以訪問,查看你的訪問路徑是否正確(部署後的上下文webcontent是否與調試中一致)
4、訪問不到有很多原因,要看你面對的具體問題去排查,比如報錯信息之類~