大家好!我们已经将博客后台从原来的 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 。

最新文章

  1. caffe的python接口学习(2):生成solver文件
  2. Webform(分页、组合查询)
  3. C++:成员运算符重载函数和友元运算符重载函数的比较
  4. Innodb物理存储结构系列1
  5. (原)VS2013在Release情况下使用vector有时候会崩溃的一个可能原因
  6. C++读写文件的简单例子
  7. Android常用动画Frame-By-Frame Animations的使用
  8. MySql绿色版安装过程记录
  9. JTable用法-实例
  10. SpringCloud应用入库后乱码问题
  11. sed应用
  12. fontFamily &#39;Ionicons&#39; is not a system font and has not been loaded through Expo.Font.loadAsync的问题
  13. xml模块 增删改查
  14. Linux 搭建git 自己拉取本地 git pull,其他地方的git仓库拉取代码
  15. sqlserver2017 +SSMS+ VS2017+SSDT 安装要点及相关组件下载地址
  16. Spring事务传播属性介绍(二).mandatory、not_supported、never、supports
  17. MySQL创建数据库/表等基本命令操作
  18. bash deploy.sh 通过bash命令 执行scp -r 命令将本地文件拷贝到服务器
  19. Kali 防火墙配置
  20. 认识Echarts(网址:http://echarts.baidu.com/tutorial.html#ECharts%20%E7%89%B9%E6%80%A7%E4%BB%8B%E7%BB%8D)

热门文章

  1. Sql获取第一天、最后一天
  2. zookeeper初识之原理
  3. 如何编译spring源码,并导入到eclipse中
  4. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能
  5. MySQL日期 字符串 时间戳互转
  6. Linux Centos7下安装Python
  7. 搜索栏会消失 uisearchbar 狂点消失的问题解决
  8. 使用OpenXML操作Office文档
  9. 第二个Sprint冲刺项目github
  10. cut - 小巧的文本截取工具