[ASP.NET] 解決當使用 FriendlyUrls 網站執行 ajax 呼叫 WebMethod 錯誤

解決問題發生於當網站使用了 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 預設為關閉並區分為三種模式,如下。

  1. Permanent : (執行永久重新導向 (301 回應碼)
  2. Temporary : (執行暫時重新導向 (302 回應碼)
  3. 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 命名空間

RedirectMode 列舉

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)