国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在 ASP.NET 開發中使用非 .Net Web 服務

2024-07-10 12:57:29
字體:
來源:轉載
供稿:網友
對于如何使用 webrequest 和 webresponse 類在 uri 上生成 post 請求,在微軟的 .net 快速入門教程中有詳細的描述(http://chs.gotdotnet.com/quickstart/howto/doc/webrequests/clientpost.aspx),簡要引用如下:

webresponse 類是抽象(在 visual basic 中為 mustinherit)基類,協議特定的響應類從該抽象基類派生。應用程序可以使用 webresponse 類的實例以協議不可知的方式參與請求和響應事務,而從 webresponse 派生的協議特定的類攜帶請求的詳細信息。

客戶端應用程序不直接創建 webresponse 對象,而是通過調用 webrequest 實例上的 getresponse 方法來創建它。

對繼承者的說明: 從 webresponse 繼承時,必須重寫以下成員:contentlength、contenttype、getresponsestream、responseuri 和 headers。

如果需要使用 webrequest 和 webresponse 類在 uri 上生成 get 請求。可在函數 getpage 中找到生成請求的特定詳細信息。getpage 函數采用字符串參數,該參數是您請求的 web 頁的 url(或 uri)。然后,此 uri 作為參數包括在對 webrequest.create 的調用中,該調用創建 webrequest 對象。接著,webrequest 對象的 getresponse 函數用于獲取 webresponse 對象。此對象可用于獲取響應的狀態代碼以及實際響應流(例如,web 頁)??梢圆捎脦追N不同的形式寫出該流。

在處理完響應流后,必須確保調用 webresponse 對象的 close 方法,以免泄露有價值的系統資源。

如果需要使用 webrequest 和 webresponse 類在 uri 上生成 post 請求。 則可采用類似于帶有 get 謂詞的簡單 webrequest。其中有兩處不同:
1) 謂詞需要更改為 post。
2) 需要對格式信息進行編碼并發送到流中。
若要更改謂詞,只需將 method 屬性設置為“post”。 然后必須將 contenttype 屬性設置為“application/x-www-form-urlencoded”。此時,確保所提供的字符串編碼正確,所有內容都將被正確地傳遞 (post)。

處理完響應流后,必須確保調用 webresponse 對象的 close 方法,以免泄露有價值的系統資源。

<!-- 正文 -->

了解了具體的實現方法及原理后,就可以實現其目的。首先需要一個函數以實現該功能:

/// <summary>
/// getpage 獲得 post 請求結果頁
/// url 要請求的地址
/// payload 輸入的參數<xml>
/// outputresp 輸出結果
/// </summary>
private bool getpage(string url, string payload, ref string outputresp)
{
webresponse result = null;
outputresp = "";
try
{
webrequest req = webrequest.create(url);
req.method = "post";
req.contenttype = "application/x-www-form-urlencoded";
if (payload != null)
{
string urlencoded = payload;

byte[] somebytes = null;
somebytes = encoding.utf8.getbytes(urlencoded.tostring());
req.contentlength = somebytes.length;
stream newstream = req.getrequeststream();
newstream.write(somebytes, 0, somebytes.length);
newstream.close();
}
else
{
req.contentlength = 0;
}
result = req.getresponse();
stream receivestream = result.getresponsestream();
encoding encode = system.text.encoding.getencoding("utf-8");
streamreader sr = new streamreader(receivestream, encode);
outputresp = sr.readtoend();
}
catch(exception e)
{
console.writeline( e.tostring());
console.writeline("/r/n找不到請求 uri,或者它的格式不正確");
return false;
}
finally
{
if ( result != null )
{
result.close();
}
}
return true;
}

這個函數就實現了具體的請求功能,要求輸入請求的地址(url)及參數(payload:xml文件格式),然后 webrequest 向服務地址發送 post 請求,由 streamreader 讀出具體的結果,下面是一個具體的使用該函數的例子:

private void button_serverclick(object sender, system.eventargs e)
{
string userregisterreq = "";
userregisterreq = @"<?xml version=""1.0"" encoding=""gb2312""?>
<elink>
<msgtype>userregisterreq</msgtype>
<version>1.0</version>
<userprofile>
<username>test</username>
<userpwd>test</userpwd>
</userprofile>
</elink>";
string outputresp = "";
bool isreg = false;
isreg = this.getpage(@"http://dll.test.com/test.dll/", userregisterreq, ref outputresp);

if(isreg)
{
// outputresp = outputresp.replace(@"<", "&lt;");
// outputresp = outputresp.replace(@">", "&gt;");
response.write(outputresp);
}
}

button_serverclick 是一個 button 單擊事件,當輸入正確的 url(請求地址)和 payload(輸入的參數),就得到由服務程序提供的返回值。
中國最大的web開發資源網站及技術社區,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安福县| 孝昌县| 鞍山市| 阿坝| 孙吴县| 从化市| 桦南县| 岱山县| 武强县| 保德县| 绥宁县| 鄱阳县| 郯城县| 含山县| 沧州市| 雅江县| 洪洞县| 行唐县| 冕宁县| 西峡县| 克东县| 屏东县| 思南县| 南充市| 泰来县| 若尔盖县| 临夏市| 阳谷县| 南充市| 彩票| 偏关县| 安化县| 新泰市| 柘城县| 逊克县| 香格里拉县| 洛隆县| 娱乐| 肇东市| 宜阳县| 宕昌县|