摘要:[ASP.NET] 使用 Web Service Redirection
前言
一般的Redirect導向都會在Client處理,但是如果當真的有需求要在Web Service做重定向時該如何處理呢? 其實在Web Service做重訂向的動作是不好的,基於職責分工Web Service該做的工作應該是接收Client端的呼叫後處理資料內容後在將處理好的資料回傳給Client,而碰到重定向這種需求也應該是由Web Service回傳一個URL給Client再由Client端去處理重定向的動作才正確,但如果真的無法避免需要使用Web Service做重定向,可以參考以下範例的方法處理。
範例
在 Web Service 透過修改 StatusCode 與 HTTP Header 處理 Redirection,語法如下:
ASPX:
<div>
<asp:Button ID="Button1"
runat="server"
Text="Call Web Service"
PostBackUrl="http://localhost:21978/Web/WebService.asmx/RedirectPage" />
</div>
Web Service:
[WebMethod]
public string RedirectPage() {
Context.Response.StatusCode = 302;
Context.Response.AddHeader("Location", "http://localhost:21978/Web/Default2.aspx");
return null;
}
這邊要注意的是不建議使用 Context.Response.Redirect("Default2.aspx"),因為HTTP的回應中基本信息規範不盡相同,可能發生非預期錯誤,如果使用了以上這種方式重定向,網頁的連結按鈕必須要使用直接POST方式發送請求,如使用以下方法呼叫則將產生 System.Net.WebException 例外。
MyWS.WebService ws = new MyWS.WebService();
ws.RedirectPage();
因為 Web Service 使用了SOAP協定,而做了重定向的方法並不符合SOAP協定的操作方式,所以無法以程式面去呼叫此Web服務方法。
參考資料
How to Apply the Basic Profile
範例程式
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)