2014年2月14日 星期五

MVC4 - Error 403 Dealing with problems Part1 - 403 - Forbidden: Access is denied.問題處理

開發過Web程式,應該對403這個ErrorCode不陌生,一定會常看到它的敘述如下
「You do not have permission to view this directory or page using the credentials that you supplied.」
它除了「權限限制存取」的意思外,通常另一個最有趣的解讀,就是「讀不到頁面」。

筆者要介紹小問題處理狀況,就是在開發者透過Nuget更新套件時,產生的問題之一處理。
這個問題的產生原因,是在開發者更新System.Web.Mvc這套件時,依賴性的套件如System.Web.Routing,會在更新完之後,重新設定RouteConfig.cs底下RegisterRoutes函數。

但初學者不容易察覺,所以許多人更新完套件後,會有默名的疑問「程式碼沒有更動,但為什麼無法正常的執行?」,其實Nuget已經偷偷的在原始結構上悄稍的改變了Function的陳述結構。因為它的初始它是最原生的結構,並不是專給MVC的架構。所以它的程式碼會長這個樣子:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace ManiaControlPanel
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }
}

這時候我們就要手動去更改它的結構設定,程式碼如下:

using System.Web.Mvc;
using System.Web.Routing;
namespace ManiaControlPanel
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

這樣就可以正常的運作了,這類型的問題是比較不容易察覺,筆者在這分享。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言