解決問題發生於當網站使用了 FriendlyUrls 套件時,程式進行了 Ajax 呼叫 WebMethod 時會發生 401 或 200 但是並未呼叫到該 WebMethod 。
前言
FriendlyUrls 是一個讓 Web Form 網站也能夠使用簡易 URL 的套件,此問題情況發生於當網站使用了 FriendlyUrls 套件時,程式進行了 Ajax 呼叫 WebMethod 時會發生 401 或 200 但是並未呼叫到該 WebMethod 。
解決方法
檢查 FriendlyUrls 套件的 FriendlyUrlSettings 類別設定,在註冊簡易 URL 時一般使用以下程式碼進行註冊,如下。
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}
其中在 FriendlyUrlSettings 類別的設定指定了 AutoRedirectMode 屬性為 RedirectMode.Permanent 模式,AutoRedirectMode 預設為關閉並區分為三種模式,如下。
- Permanent : (執行永久重新導向 (301 回應碼)
- Temporary : (執行暫時重新導向 (302 回應碼)
- Off : 不執行自動重新導向 (停用)
當 Permanent / Temporary 使用時,在網址輸入 http://localhost/default.aspx 將會自動重新導向為 http://localhost/default 簡易 URL。
回到原問題,當呼叫 WebMethod 時會因為使用重新導向而發生錯誤,因此在此必須將 AutoRedirectMode 不設定(預設關閉)或設定為 Off 模式,如下。
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
//settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}
但是如不設定自動導向模式,當網址輸入包含 Default.aspx 時將不會自動導向為 Default 簡易 URL,不知各位前輩是否有更好的解法?以上是此問題的解決方法。
參考資料
Microsoft.AspNet.FriendlyUrls 命名空間
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)