强制mvc使用基于Cookie的自定义值提供程序而不是默认使用Querystring

时间:2017-07-17 07:38:27

标签: c# .net asp.net-mvc asp.net-mvc-5 value-provider

我实施了自定义值提供程序。我有一个包含查询字符串的链接,如

ads?lid=val

和我的行动定义

public async ReturnType ads(int lid=0)

我在Global.asax中注册了价值提供者,如

 ValueProviderFactories.Factories.Add(new Listhell.CODE.CustomValueProviderFactory());

但是当我点击控制器上的链接时,我会获得查询字符串值而不是cookie&#39>

如何让mvc使用自定义值提供程序将cookie值传递给控制器​​而不是默认行为?

1 个答案:

答案 0 :(得分:0)

有几个内置提供程序,比如查询字符串等。这些提供程序从链的开始逐个调用,直到其中一些提供者能够提供值。

所以你必须注册" CustomValueProviderFactory"在以下代码行的默认值提供者链之上:

ValueProviderFactories.Factories.Insert(0, new Listhell.CODE.CustomValueProviderFactory());

因此首先调用您的自定义值提供程序,您应该从任何需要的地方获得价值。以下代码行演示了如何从cookie中获取此值:

public class CookieValueProvider: IValueProvider
{
    public bool ContainsPrefix(string prefix)
    {
        return HttpContext.Current.Request.Cookies[prefix] != null;
    }

    public ValueProviderResult GetValue(string key)
    {
        if(HttpContext.Current.Request.Cookies[key] == null)
            return null;

        return new ValueProviderResult(HttpContext.Current.Request.Cookies[key],
            HttpContext.Current.Request.Cookies[key].ToString(), CultureInfo.CurrentCulture);
    }
}
希望它有所帮助。