MVC和WebAPI如何从Filter向Action中传递数据
http://www.itfanr.cc/2016/04/17/transfer-data-from-filter-to-action/
MVC和WebAPI如何从Filter向Action中传递数据
需求
最近在策划实现MVC项目中用户身份验证的功能时,考虑用MVC中的Filter过滤器来先从url链接中获取传递过来的token,在Filter中通过token获取用户的信息后,如果用户信息正确,则传递到Controller的Action中进行用户数据的操作。
那么,要如何从Filter中向Action中传递数据呢?
how to pass data from filter to controller?
注意:下面所提到的Filter都指实现ActionFilterAttribute的过滤器
MVC中 从Filter过滤器向Action中传递数据
方法一 通过 RouteData 来传值
1 |
//赋值: |
测试通过。
详见: ASP.NET MVC Pass object from Custom Action Filter to Action - Stack Overflow
方法二 通过 ActionParameters 来传值
另一种方法是通过 ActionParameters 来设置,但在Action中是通过添加参数获取值的:
1 |
//赋值: |
详见: Manipulating Action Method Parameters - You’ve Been Haacked
通过测试,发现这种方法可以隐藏真实的Action方法:
比如:
请求的链接是 http://localhost:47760/home/show?id=3&name=abc
而实际的Action为:
1 |
public ActionResult Show(string aaa){}
|
那么可以通过添加一个 ActionFilterAttribute 过滤器,并设置:
1 |
this.Uname=getquerystring.name; |
这样虽然url中请求的参数时id和name,而实际请求参数是aaa;
而实际的请求链接 http://localhost:47760/home/show?aaa=haha 也是可以访问的。
方法三 通过 HttpContext.Items 来传值
1 |
//Filter中赋值: |
测试通过。
通过测试发现好像这种方式比较合适。因为:可看到Items的解释为:
在派生类中重写时,获取一个键/值集合,该集合在 HTTP 请求过程中可以用于在模块与处理程序之间组织和共享数据。
详见: asp.net mvc - Accessing Action Filter's data in Controller Action - Stack Overflow
WebAPI中从Filter向Action中传递数据
如何从Filter向Action中传递数据?
方法一 通过 Request.Properties 来传值
1 |
//Filter中赋值: |
或:
1 |
//赋值: |
测试通过。
详见:
- asp.net web api - WebApi: how to pass state from filter to controller? - Stack Overflow
- asp.net web api - Pass an object from ActionFilter.OnActionExecuting() to an ApiController - Stack Overflow
总结
MVC 用 :
1 |
filterContext.HttpContext.Items[UnitOfWorkRequestKey] = UnitOfWork; |
Web API 用 :
1 |
actionContext.Request.Properties[UnitOfWorkRequestKey] = UnitOfWork; |
详见: c# - Web API Action Filter - Controller.TempData equivalent? - Stack Overflow
MVC和WebAPI如何从Filter向Action中传递数据的更多相关文章
- ASP.NET MVC中如何以ajax的方式在View和Action中传递数据
前言:写这篇随笔的时候,在url上漏写了斜线,找了好久错误,整个人都很不好.#我是猪系列 背景:之前介绍过一篇如何构建 MVC&AJax&JSon示例,这一篇单独讲解如何在View和A ...
- 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...
- Struct2 向Action中传递参数(中文乱码问题)
就是把视图上的值传递到Action定义的方法中 也就是把数据从前台传递到后台 三种方式: 1. 使用action属性接收参数 比如jsp页面: <body> 使用action属性接收参数 ...
- Struts2获取Action中的数据
当我们用Struts2框架开发时,经常有要获取jsp页面的数据或者在jsp中获取后台传过来的数据(Action),那么怎么去获取自己想要的数据呢? 后台获取前端数据: 在java程序中生成要获取字段的 ...
- struts2 action中传递两个参数到url
<action name="outInDetail" class="formManage_outInDetailAction"> <resul ...
- Tomcat + Spring MVC + HttpClient:怎样使用PUT和PATCH方法传递数据
在RESTful风格的API中.PUT/PATCH方法一般用于更新数据.在项目的代码中,使用的是HttpClient 4.5,是这样写的: protected JSONObject doHttpUri ...
- view如何从action中取得数据和 Html辅助方法
方式:1使用弱类型取,2,使用强类型,两者的差别在于view页面最上方声明的方式 如果使用弱类型接受来自控制器的数据,在view页面里完全不需要有任何的生命,数据可以从ViewData,ViewB ...
- View从Action中获得数据和html helper function(转载)
@model MvcApplication1.Models.M_Person @using MvcApplication1.Models; @{ ViewBag.Title = "GetDa ...
- ACTION中获得数据的几种方式
1.第一种是通过公司封装的方法. 2.第二种:是通过IF方法判断 3.第三种是通过:set/get获得
- [ASP.NET MVC 小牛之路]09 - Controller 和 Action (1)
我们知道,在 MVC 中每个请求都会提交到 Controller 进行处理.Controller 是和请求密切相关的,它包含了对请求的逻辑处理,能对 Model 进行操作并选择 View 呈现给用户, ...
随机推荐
- SpringCloud Alibaba技术栈(一)微服务介绍
B 站黑马视频教程:Here 源码-笔记:Code for Github 第一章 微服务总览 1. 软件系统架构的历史 软件系统架构大致经历了:单体应用架构->垂直应用架构->分布式架构- ...
- (转)Github+jsDelivr+PicGo 打造稳定快速、高效免费图床
转载自:https://www.itrhx.com/2019/08/01/A27-image-hosting/ 写在开头,之前我是使用Gitee作为图床和Picgo搭配使用的 (图片不允许超过1MB) ...
- 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路
关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...
- es报错记录
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsear ...
- 十一、docker的容器互联
系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...
- 1 Englishi 词根
1 ab 离去,相反, 不 (负能量的) abnormal abuse 2 anti 反对,相反 antiwar antiaging antiforeign antinoise 3 co-/col ...
- Angular系列教程之变更检测与性能优化
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- Latex常用数学符号输入方法
引用CSDN博文 https://blog.csdn.net/qq_25368751/article/details/87888974
- 2023 SHCTF-校外赛道 PWN WP
WEEK1 nc 连接靶机直接梭 hard nc 同样是nc直接连,但是出题人利用linux命令的特性,将部分flag放在了特殊文件中 利用ls -a查看所有文件,查看.gift,可以得到前半段 然后 ...
- 结构体Struct、联合体Union与类Class
结构体Struct.联合体Union与类Class 1. Struct/Class struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!! 1.1 ...