博客后台遷移至i.cnblogs.com及小經驗分享


大家好!我們已經將博客后台從原來的 www.cnblogs.com/博客地址名/admin/ 遷移至獨立的二級域名 i.cnblogs.com。如果您發現任何問題,麻煩您立即向我們反饋。

雖然這次遷移看起來只是網址的切換,但對我們來說卻是重要的一步——將博客后台的代碼從博客主站剝離出來,為博客后台后續的大幅度改進作好了准備。

i.cnblogs.com 是一個 ASP.NET MVC 與 WebForms 的混合環境,在將博客后台的代碼從 www.cnblogs.com 搬家至 i.cnblogs.com 的過程中,我們遇到了一些問題,在這篇博文中分享一下。

由於博客后台必須要登錄后才能訪問,所以我們在 web.config 中添加了如下的設置:

<authorization>
  <deny users="?" />
</authorization>

可是,添加之后,發現對MVC根本不起作用。我們用的 ASP.NET MVC 的版本是5.1,看來是引入 MVC 之后,這個設置被報廢了。

后來在 blogs.msdn.com 的一篇博文(Securing your ASP.NET MVC 4 App and the new AllowAnonymous Attribute)中找到了解決方法——在 RegisterGlobalFilters() 中注冊 AuthorizeAttribute,代碼如下:

protected void Application_Start()
{
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
}

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AuthorizeAttribute());
    }
}

這樣注冊后,就不需要在每個Aciont上添加[Authorize]標記了。

博客后台除了要求登錄之外,還有一個需求——只有開通博客了的帳戶才能訪問,如何全局處理這種情況呢?

這里再次用到了 AuthorizeAttribute,但需要實現自己的 AuthorizeAttribute,示例代碼如下:

public class BlogAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var result = base.AuthorizeCore(httpContext);
        if (result)
        {
            //判斷當前帳戶是否開通了博客
        }
        return result;
    }
}

然后在 RegisterGlobalFilters() 中將 filters.Add(new AuthorizeAttribute()); 改為 filters.Add(new BlogAuthorizeAttribute());

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new BlogAuthorizeAttribute());
    }
}

可是,這樣做之后發現只對 MVC 有效,對 WebForms 無效。於是,只能針對 .aspx 專門處理一下,.aspx 頁面都繼承自一個基類,在基類中進行處理。

還好,這個問題影響不大,因為在遷移過來之后,我們要做的第一項改進就是將所有的 .aspx 改為 MVC 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM