❶ WebApi中,怎麼獲取介面調用者的外網ip地址
不是默認的 WSDL 都會給一個 transport 的地址么,那個 URL 中應該有地址,當然可能不是 IP 而是伺服器域名,當然也有可能人家沒有把 URL 直接寫在 WSDL 中,但會另外在文檔中告訴你 URL 地址。你為什麼需要知道 IP 地址而不直接用域名?
從分布式的松耦合設計中我們了解到,客戶端應該只看 WSDL 再加上額外提供的可選的 URL (如果 WSDL 中沒有提供這個 transport 配置的話)就應該可以完成與伺服器的數據交換,不再需要其它條件。
❷ c#webapi介面怎麼加上安全校驗
下面這幾個注意事項或許可以幫你一些
1. 找到Web應用所有的輸入點,找到所有的能接受用戶輸入的地方,漏掉輸入點也就漏掉了可能存在的縫。
2. 過濾每一個輸入點,為每個輸入點設定相應的校驗規則和邊界。
3. 不要忘記校驗哪些隱藏域,cookie和url參數。
4. 驗證從資料庫裡面得到的數據,這個是最容易忽視的地方,不要相信來自資料庫裡面的數據就是合法的數據。
5. 你是如何做輸入校驗的? javascript?如果只是用javascript做客戶端校驗, 風險還是很大的,一定要確保加上服務端的校驗,否則如果客戶端禁用了javascript或者客戶端代碼被人工修改,非法數據還是會進入系統內部的。
6. 隱藏異常信息,再周全的校驗也不可能覆蓋所有的case,如果非法數據造成了系統的異常,不要將詳細的異常信息暴露給客戶端,這些異常信息有可能成為系統的攻擊入口。
在做輸入校驗的時候,從「什麼樣的輸入才是合法的」入手會降低驗證失效的風險,應該只為每個輸入點的輸入內容制定一個有限的,剛好夠用的合法范圍,除此之外的所有內容都當做是非法的。而從「什麼樣的輸入是不合法的」入手則會增加驗證失效的可能,因為你不可能窮舉非法的輸入。
❸ WebApi 2 路由機制
.net中包含的路由有兩種,第一種是MVC模式的按url匹配action,第二種是WebApi模式的按http請求的方法匹配action,本文我們學習WebApi的路由模式。
首先新建一個WebApi項目,選擇ASP.NET Web應用程序(.NET Framework)
這里我們首先來看WebApi的基礎配置 WebApiConfig.cs ,其路徑為 /App_Start/WebApiConfig.cs
首先以瀏覽器啟動webapi項目
會發現頁面顯示403,這是很正常的,因為我們在新建項目的時候沒有加入MVC,所以沒有可視化的view頁面,不過我們卻拿到了這個項目的 埠號
為了更加方便直觀的看我們的介面請求,我們選擇postman,首先在項目新建一個 controller
通過以上的操作,我們就搭建好了一個webApi2的項目工程,後面我們就在這個工程的基礎上進行webApi 2的開發和學習。
webApi的路由過程主要經歷了如下三步
WebApiConfig.cs 這個文件是進行路由表的核心文件, WebApiConfig 裡面只有一個方法,這個方法在 Global.asax 文件里的 Application_Start() 方法被調用, Global.asax 文件是一個全局文件,當我們網頁啟動時就會去執行它。 Register(HttpConfiguration config) 方法是配置WEB API路由的。
因此 在webAP工程啟動的時候,會執行 Global.asax ,這個文件裡面注冊了 WebApiConfig.cs 的一系列初始化配置,從而實現了webapi。
WebApi 2 框架使用路由表。 並由Web API 的 Visual Studio 項目模板創建默認路由
轉到 MapHttpRoute 的定義,可以看到它有4個重載
分別來看看各個參數的作用
webApi2工程自動為我們創建了默認的路由
經過上面的講解,我們知道了匹配的URL是 api/{controller}/{id}
那麼我們在實際的請求中應該如何請求
新建一個 StudentsController
依次對以下地址進行請求
總結:
默認路由的缺點
如下
添加如下的方法(action)
得到了一下的結果
我們來看看這個請求是如何進行匹配的,首先找到 /App_Start/WebApiConfig.cs
按照路由模板來看,我們請求的路由沒有 action 名稱,那麼它是怎麼進行匹配的呢?
其實當我們訪問 http://localhost:65066/api/student 這個url的時候,webapi會自動去匹配 api/{controller}/{id} 這個模板,在這個路徑中,student是controller,那麼它又是怎麼去找到 getStudentName 這個action的呢?明明我們都沒有傳action這個參數,其實Webapi的路由規則是通過http方法去匹配對應的action,我們請求這個地址是用的 GET 方法,那麼webapi會找Order這個控制器裡面的get請求的方法,同事我們的這個 getStudentName 是以 get 開頭的,它符合了webapi的匹配規則,於是就請求成功了,但前提是你寫的方法必須是以get開頭的,如果當前這個controller一個get開頭的都沒有,那麼就顯示 請求的資源不支持 http 方法「GET」 。
當然不以get開頭的前提是你必須加上 [HttpGet] 這個特性,webapi才知道你這個是get的請求方法,就能正確進行匹配。
然後我們再回到 /App_Start/WebApiConfig.cs ,看下裡面 MapHttpRoute 的各個參數的含義,首先轉到它的定義,發現它是 HttpRouteCollection 的擴展方法, MapHttpRoute 有4類重載
在 WebApiConfig.cs 裡面修改為如下的路由模板
介面請求如下
通過 action 的名稱來匹配很好理解,上面的 StudentName() 是方法名, webApi 會默認它就是 action 的名稱,如果你想要方法名和 action 的名稱不一致,你也可以自定義 action 的名稱,這個可以通過特性 ActionName 來實現,如下:
首先看路由模板
對於同請求類型,同請求參數的請求,會出現 不傳參數,找不到匹配的資源 或 傳了參數,但是找到了與該請求匹配的多個操作 的問題,如下所示
解決以上的辦法有兩種
如果要使用特性路由,首先在 WebApiConfig.cs 的 Register 方法裡面必須先啟用特性路由(一般情況下,當我們新建一個 WebApi 項目的時候,會自動在 Register 方法裡面加上這句話。)
特性路由的目的是為了解決我們公共路由模板引擎解決不了的問題。一個action定義了特性路由之後,就能通過特性路由上面的路由規則找到。
只要出現了特性路由,匹配的規則是按特性路由來的
修改studentController如下
參考
參考
路由前綴的一般的做法是在控制器上面使用特性 [RoutePrefix] 來標識。
但是需要注意路由前綴不能以 / 開頭
❹ java webapi介面怎麼寫
package com.dataMonitor.bo.common;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.http.HttpEntity;
❺ c#webapi 怎麼接受表單參數
用ajax進行傳參
$.ajax({
type: 'post',
dataType: "json",
contentType: "application/json",
url: url,
data: param,
cache: false,
async: false,
success: function (msg) {
callBack(msg);
},
error: function (msg) {
callBack("error");
}
});
其中url:是你後台方法的地址 ,data: param中的param 就是對應的參數
如果你的方法是Function(string a,string b )
那麼param就是 {a:"傳入的值",b:"傳入的值"}
❻ 請問html的js調用webapi介面
引用jquery,有很方便的GET調用方法:
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1">
<!--src值為文件位置路徑-->
<scripttype="text/javascript"charset="UTF-8"src="javascript/jquery-1.12.1.js"></script>
<title>測試案例</title>
<!--語法:jQuery.getJSON(url,data,success(data,status,xhr))-->
<scripttype="text/javascript"charset="UTF-8">
functiongetToken(){
$.getJSON("http://localhost/kdapi/api/access_token",{"id":111,"secret":2352532},function(result){
alert(result.access_token);
});
}
</script>
</head>
<body>
<buttononclick="getToken()"style="width:120px;height:60px;">獲取Token</button>
</body>
</html>
❼ c#mvc中的webapi怎麼迫使服務端返回字元串
返回值是string就好了。
publicstringGet(intid)
{
return"字元串";
}
用AJAX取json格式的就是這樣的。