WEBAPI ActionContext Request.Properties.Add用于存储敏感信息

时间:2014-04-27 16:14:15

标签: asp.net-mvc-4 asp.net-web-api

我想将动作过滤器(数据库)中的信息传递给Action函数。

使用ActionContext Request.Properties.Add存储数据是否安全?

是否有可能WEBAPI客户端或其安全信息会看到这些信息,因为它可以安全地将信息存储在Cache \ Session中?

这是一种更好的方法吗?

1 个答案:

答案 0 :(得分:3)

除非您明确地序列化客户端,否则客户端将看不到请求属性。它们完全保留在服务器端。

要回答您的后续问题,还有另外两种方法。每个人都没有“最佳”的方式。这一切都取决于您希望信息流动的程度,以及您希望过滤器的通用程度。我个人的偏好是使用控制器对象,但它只是一个偏好。

这里的示例是一个简单的值控制器和一个POCO类:

[MyActionfilter]
public class ValuesController : ApiController
{
    public string Foo { get; set; }

    public User Get(User user)
    {
        if (Foo != null && user != null)
        {
            user.FamilyName = Foo;
        }

        return user;
    }
}


public class User
{
    public string FirstName { get; set; }
    public string FamilyName { get; set; }
}

下面的操作过滤器天真地实现了对控制器对象或方法参数的访问。请注意,您可以谨慎地应用过滤器,也可以键入检查/字典检查。

public class MyActionfilter : ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        controller = actionContext.ControllerContext.Controller;

        // Not safe unless applied only to controllers deriving
        // from ValuesController
        ((ValuesController)controller).Foo = "From filter";

        // Not safe unless you know the user is on the signature
        // of the action method.
        actionContext.ActionArguments["user"] = new User()
        {
            FirstName = "From filter"
        };
    }
}