我正在使用Ajax发送表单,它有两个输入。接收操作只需要使用传递的值之一。一个ActionFilterAttribute
需要使用另一个参数。
出于这个原因,我把我的动作写成
[AttributeImWriting]
public ContentResult Get(Guid value0) //[...]
但是当我尝试做时,在我的动作过滤器中
context.ActionArguments["value1"]
我得到一个例外,因为参数不存在。
System.Collections.Generic.KeyNotFoundException:"字典中不存在给定的键'value1'。
如果我将动作的原型更改为
public ContentResult Get(Guid value0, string value1) //[...]
然后我可以从我的 filterAttribute 中读取value1
。
所以问题是:在ActionFilterAttribute
中,我如何读取由表单发送的参数,但该参数不存在于应用过滤器的操作的原型中?
我也尝试使用RouteData.Values
但它并没有更好。
如果你使用 POST
将值发送到控制器端,在自定义ActionFilterAttribute
中,你可以从Form
属性中获取参数:
var value1 = context.HttpContext.Request.Form["value1"].ToString();
如果使用Get
将值发送到控制器端,则可以从属性中获取参数QueryString
然后拆分并获取每个项目:
var querystring = context.HttpContext.Request.QueryString;