在ASP.NET MVC中按优先级返回表单,查询字符串,Cookie值

时间:2020-03-06 14:52:37  来源:igfitidea点击:

我想知道为什么从用户请求中获取值时首选查询字符串。在哪里?
1)System.Web.Mvc.DefaultModelBinder的代码如下所示(仅一部分):

HttpRequestBase request = controllerContext.HttpContext.Request;
    if (request != null)
    {
        if (request.QueryString != null)
        {
            values = request.QueryString.GetValues(modelName);
            attemptedValue = request.QueryString[modelName];
        }
        if ((values == null) && (request.Form != null))
        {
            invariantCulture = CultureInfo.CurrentCulture;
            values = request.Form.GetValues(modelName);
            attemptedValue = request.Form[modelName];
        }
    }

2)如果我在控制器中具有此签名的方法:

public ActionResult Save(int? x, string y) {...

参数(x,y)绑定到查询字符串而不是表单的值。
我希望Request.From的值比Request.QueryString的值具有更高的优先级。

编辑:我看到第二种情况是由第一种情况(DefaultModelBinder)引起的,对吗?

背后的动机是什么?

解决方案

一致性。

自原始ASP模型以来,查询字符串一直是默认字符串。如果要获取数据,那么如果查询字符串上也有相同的名称,则始终需要从那里显式地获取值。