在过滤器里引入重定向

过滤器的引入:
如果用户进行一个操作,但没有登录,
可以在Post方法上加个过滤器以验证用户是否登录,如果登录成功,则继续进行操作,如果没有登录,则实现Url的重定向,进行登录页

授权过滤器可以继承自AuthorizeAttribute类,通常重写它的OnAuthorization() 方法,将要验证的逻辑写在方法里,而filterContext就是当前web请求的上下文,如果希望得到当前页面的Request,Response,HttpContext,RouteData等信息,可以通过它得到

注意:对于异步POST,在Controller里一般都是返回JsonResult或者ContentResult,
所以必须要返回一个Javascript的上下文,这样才能让JS脚本执行,而对于同步提交,要返回一个Html页面

 <script>
//异步提交
$.ajax({
type: "Post",
url: "/common/review",
success: function (data) {
alert(data.res);
}
}); //同步提交
$("form").submit();
</script>

同步表单,返回view或者partialview时,事实上返回的是一个text/html格式的视图

异步表单,返回Json,text,xml,javascript时,事实上返回的是一个text/javascript格式的视图

举个实例:

    public class RoleFilter : AuthorizeAttribute
{
const string USER_WARN = "您必须先登陆才能执行本操作";
const string WORKSHOPUSER_WARN = "必须是本工作室的用户才能执行本操作";
const string WORKSHOPTEACHER_WARN = "必须是本工作室的老师才能执行本操作";
bool _roleFlag = false;
public RoleFilter(bool RoleFlag)
{
this._roleFlag = RoleFlag;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var userId = filterContext.RequestContext.HttpContext.Session["UserID"];
var request = filterContext.RequestContext.HttpContext.Request;
var routeData = filterContext.RequestContext.RouteData.Values["Id"];
//同步方式
string htmlMsg = @"<html><head><title></title></head><body>
<link href='/Scripts/jquery-plugin-boxy/css/boxy.css' rel='stylesheet' type='text/css' />
<script src='/Scripts/jquery-1.4.4.min.js' type='text/javascript'></script>
<script src='/Scripts/jquery-plugin-boxy/js/jquery.boxy.js' type='text/javascript'></script>
<script src='/Scripts/jquery-plugin-boxy/jBoxyFun.js' type='text/javascript'></script>
  <script type='text/javascript'>
$(function(){
alertHrefFun('msg','url');});</script></body></html>";
//异步方式
string jsMsg = @"alertHrefFun('msg','url');"; switch (this._roleFlag)
{
case false: //RoleFlag.User:
if (userId == null || Convert.ToInt32(userId) <= )
{
var result = new ContentResult
{
Content = htmlMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString()),
ContentType = "text/html",
};
if (request.IsAjaxRequest())
{
result.Content = jsMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString());
result.ContentType = "text/javascript";
}
filterContext.Result = result;
} break;
default:
break;
}
}
}

注意:如果是返回text/html页面,原来的视图将被覆盖,所以js文件和css文件需要重新引用才行,如果返回是text/javascript,则会使用原页面的脚本文件与样式文件

最新文章

  1. mysql 删除重复数据保留只保留一条
  2. spring与redis简单整合
  3. C语言 百炼成钢14
  4. 通过IP获得IP所在地的三个接口
  5. 【hadoop2.6.0】倒排索引遇到问题了
  6. Source Insight中文乱码
  7. url传递中文的解决方案
  8. 使用VisualVM查看Java Heap Dump
  9. FastRPC 3.2 发布,高性能 C++ 协程 RPC 框架
  10. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)
  11. 【Centos7】安装mysql5.7.16.tar.gz
  12. 3.3 声明[[],]的数组, push_back() 和 back() 的区别
  13. 目录命令(dir)
  14. cv2.getRotationMatrix2D函数
  15. angular + socket.io+nodejs
  16. Spark操作dataFrame进行写入mysql,自定义sql的方式
  17. java字符串截取指定下标位置的字符串
  18. long和int互转
  19. python len()函数的用法
  20. 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet

热门文章

  1. [Irving]DateTime格式处理大全
  2. [codevs3295]落单的数
  3. 【JS】Intermediate6:jQuery
  4. jsp简易文件上传(common.fileupload)
  5. Codeforces Round #341 (Div. 2) ABCDE
  6. hdu3681--Prison Break(TSP+二分)
  7. hdu 1754 I Hate It (splay tree伸展树)
  8. 工作7年,从《一个苏州IT人的5年挨踢经历》系列开始,博客1年半,纯纪念
  9. maven依赖规则
  10. MySQL安装配置,命令,异常纪要