參考資料:使用actionfilterattribute 記錄 webapi action 請求和返回結果記錄
什麼是sdk,sdk其實就是做最傻瓜化的封裝,別人能夠很有好的呼叫你的方法
這裡我們做乙個客戶端像服務端發起http請求的例子,在這個例子中我們封裝乙個.net的sdk
第一步:建立乙個名字叫apiskd的類庫
建立乙個類:sdkresult.cs
namespace apiskd
/// /// 響應狀態碼
}}
建立乙個類:sdkclient.cs
namespace apiskd
/// /// 非同步get請求
///
/// 請求引數鍵值對
///
public async taskgetasync(string url, idictionaryrequestparamsdic)
//對請求引數的key按照公升序排序,然後再用等號將key和value連線起來:例如 name=lily
var rporderitems = requestparamsdic.orderby(r => r.key).select(r => r.key + "=" + r.value);
var requestparamsstr = string.join("&", rporderitems); //用&號拼接請求引數;例如:age=26&name=lily
}/// /// 非同步post請求
///
/// 請求引數鍵值對
///
public async taskpostasync(string url, dictionaryrequestparamsdic)
//對請求引數的key按照公升序排序,然後再用等號將key和value連線起來:例如 name=lily
var rporderitems = requestparamsdic.orderby(r => r.key).select(r => r.key + "=" + r.value);
var requestparamsstr = string.join("&", rporderitems); //用&號拼接請求引數;例如:age=26&name=lily
}
現在我們就新增乙個暴露給外面呼叫的類,例如 使用者操作類,我們暫且給它取名叫userapi(只是命名中有個api,但是他不是乙個api專案)
建立乙個類:userapi.cs (暴露在外,供客戶端呼叫)
namespace apiskd
public async taskaddasync(string phonenum, string nickname, string password)
//使用newtonsoft把json格式反序列化為long
long id = jsonconvert.deserializeobject(result.result); //需要安裝:newtonsoft.json
return id;
}else}}
}
建立乙個控制台應用程式:在裡面呼叫我們封裝的sdk類庫的userapi類,實現新增資料使用者的目的
}}服務端中我們就簡單的放了乙個控制器方法
}}並在webapi中我們還建立了乙個身份驗證的過濾器
namespace webapi
}ienumerablesigns;
if (!actioncontext.request.headers.trygetvalues("sign", out signs)) //從請求報文頭中獲取sign;}
string sign = signs.first();
string requestdatastr = ""; //請求引數字串
list> requestdatalist = new list>();//請求引數鍵值對
if (actioncontext.request.method == httpmethod.post) //如果是post請求
//requestdatalist就是按照key(引數的名字)進行排序的請求引數集合
requestdatalist = requestdatalist.orderby(kv => kv.key).tolist();
var segments = requestdatalist.select(kv => kv.key + "=" + kv.value);//拼接key=value的陣列
requestdatastr = string.join("&", segments);//用&符號拼接起來}}
if (actioncontext.request.method == httpmethod.get) //如果是get請求
//使用者傳進來md5值和計算出來的比對一下,就知道資料是否有被篡改過
if (sign.equals(computedsign, stringcomparison.currentcultureignorecase))
else;}
}/// /// 獲取post請求的請求引數內容
/*這裡也要注意: stream.position = 0;
當你讀取完之後必須把stream的位置設為開始
因為request和response讀取完以後position到最後乙個位置,交給下乙個方法處理的時候就會讀不到內容了。
*/stream.position = 0;
return result;}}
}
這裡提供乙個jwt輔助類
using jwt;
using jwt.algorithms;
using jwt.serializers;
using microsoft.aspnet.signalr.hubs;
using system;
using system.collections.generic;
using system.configuration;
using system.linq;
using system.web;
using usercenter.netsdk;
namespace im.web
/// /// 把user加密放到jwt字串中
///
///
/// jwt字串
public static string encrypt(user user)
/// /// 從jwt token中解密出來user
///
///
/// 如果token錯誤、被篡改或者過期,則返回null
public static user decrypt(string token)
catch (tokenexpiredexception)
catch (signatureverificationexception)
}/// /// 獲得當前登入使用者的user(供asp.net mvc用)
}/// /// 獲得當前登入使用者的user(供signalr的hub用)
///
///
///
public static user getuser(hubcallercontext hubcontext)
string token = hubcontext.requestcookies["jwttoken"].value;
return decrypt(token);}}
}
Forms 身份驗證
配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...
WebService身份驗證
web service身份驗證解決方案一 通過通過soap header身份驗證。1.我們實現乙個用於身份驗證的類,檔名mysoapheader.cs mysoapheader類繼承自system.web.services.protocols.soapheader。且定義了兩個成員變數,userna...
WebServices身份驗證
最近遇到乙個問題,暴露在網路上的web service如何做身份驗證,而不被其他人說是用。mysoapheader.cs類 using system using system.collections.generic using system.linq using system.web namespa...